TEDASKは埼玉県川口市のフリーランスWEBエンジニアが運営するホームページです。WordPressによるウェブサイト制作からWEB制作に関するお悩み解決をお手伝いしています!

TEDASK(テダスク)

Laravel開発 エンジニア向け

laravelのformでgetでデータを送信・取得する方法

更新日:

こんにちは。テダスクのとしです。

この記事を見ていただいている人は、恐らくlaravelでPOSTでデータの送信は出来るけど、

GETでどうやって送信して、その後どうやって取得するのだろうと悩んでいる方だと思うのですが、そのやり方について今回はお伝えしようと思います。

 




 

laravelでGETでデータ送信する状況とは

そもそもlaravelであれ、htmlであれGETでデータを送信する状況ってどういう状況でしょうか?

一般的には、サイト内検索とかでしょうか。

 

FORMからGETで送信すると例えばURLが

https://tedask.jp/article?search=laravel

のようにarticleというページに対して?search=laravelという文字が付いていますが、laravelという文字をクエリ文字列という形で遷移先のPHPファイルにデータ送信するわけですね。

POSTの場合は、このクエリ文字列を表示していないだけで、やっていることは同じです。

ただ、今回この記事を書こうと思ったのは、サイト内検索でGETをする方法をメモるために作ったのではなく、別な理由でこの記事を書こうと思いました。

 

どういった状況でこのGETを使うかというと、送信したデータがあって(例えば、商品のIDとか)それを、お気に入りとしてDBに登録したいんだけれども、一旦ログインを挟む場合、ログイン認証の時にPOSTするので、最初に送信しようとしていた商品IDを更にPOSTしようとすると、途中でデータが落ちてしまってエラーが起こり結局元の商品に戻ることも、お気に入りに登録することも出来ない。

そんな状態を回避するためにGETを使います。

 

記述はmethod="POST"を"GET"に変えるだけ

記述の方法は、method="POST"をmethod="GET"に変えるだけで他はそのままでControllerでRequestとしてデータの取得が出来ます。

例)

view/item.blade.php

<form method="GET" action="{{action('ItemController@bookmark')}}">
{{ csrf_field() }}
  <input type="hidden" value="{{$item->id}}" name="item_id">
  <input type="submit" class="btn btn-primary" value="お気に入りに追加する">
</form>

route/web.php

Route::get('/nologinbookmark', 'ItemController@bookmark');

itemController.php

public function nologibookmark(Request $request)
    {
        $user = \Auth::user();

        $bookmark = Bookmark::where('user_id', $user->id)
        ->where('item_id',$request->item_id)
        ->first();

        //既にお気に入りに登録されているかを判定
        if(empty($bookmark)) {
            $bookmark = new RecommendOshimen();
            $bookmark->user_id = $user->id;
            $bookmark->item_id = $request->item_id;
            $bookmark->save();
  
            return redirect('/item/'.$request->item_id)->with('flash_message', 'ブックマークしました。');

        }
            else
        {
        return redirect('/item/'.$request->item_id)->withErrors(['message' => 'すでにブックマークしています。']);
    }
}

こんな感じでしょうか。

見て分かるとおり、GET以外の処理はPOSTの時と変わりませんね。

他のコントローラーについては、参考程度にして下さい。

 

この他にも、例えばformのactionのURLにIDを含めて送信するという手もありますよ。

view/item.blade.php

<form method="GET" action="{{action('ItemController@bookmark', $item->id)}}">
{{ csrf_field() }}
  <input type="submit" class="btn btn-primary" value="お気に入りに追加する">
</form>

route/web.php

Route::get('/nologinbookmark/{id}', 'ItemController@bookmark');

 

最後に

以上で、laravelでformからGETで送信する方法の説明を終わります。

routeの指定ファイルで送信のときはPOSTとかPATCHとか指定するのが普通だと思うので、一瞬GETでどうやるんだろうって悩んでしまうのですが、単純にformでGETさえ指定すればあたりまですが、GETとして送信されるのでrouteもGETのままでOKということですね。

参考になれば幸いです。

 

PHPフレームワーク Laravel入門

PHPフレームワーク Laravel入門

掌田津耶乃
3,300円(11/19 17:28時点)
発売日: 2017/09/16
Amazonの情報を掲載しています

こちらの記事もおすすめです☆

Laravel開発 エンジニア向け

laravelのformでgetでデータを送信・取得する方法

こんにちは。テダスクのとしです。 この記事を見ていただいている人は、恐らくlaravelでPOSTでデータの送信は出来るけど、 GETでどうやって送信して、その後どうやって取得するのだろうと悩んでいる ...

Laravel開発 PHP エンジニア向け

laravelで送信したメールに改行が入らない原因はtextにしていないからかも

最近laravel5.6でWEBサービスを作っておりますが、laravelで会員の新規登録を行った際に、そのメールアドレスが存在するかを確認する仕様があったので、以下のサイトを参考にしながら、メール確 ...

Laravel開発 エンジニア向け

laravelのサービスプロバイダーを複数のビューで利用する方法

こんにちは。テダスクのToshiです! 今日は、このサイトでは初めて、PHPフレームワークのLaravelについての記事を書きます。   このサイトを見に来ている方は恐らくサービスプロバイダ ...

paypalクレジット決済

Laravel開発 PHP WordPress エンジニア向け カスタマイズ

Paypal決済を導入するときにクレジットカード決済が表示されないのはクッキーのせいかも!

こんにちは。テダスクのとしです。 最近ですが、サイトにPaypal決済を導入することがあり、その時にハマったのがこのクレジットカード決済が表示されない問題です。 今回はこのPaypal決済を導入すると ...

 

 

この記事が気に入ったら
いいね ! しよう

-Laravel開発, エンジニア向け
-