Laravel開発

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

laravel Laravel開発

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

この記事を見ていただいている人は、恐らく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ということですね。

参考になれば幸いです。

 

 

WordPressやWEB技術、集客、ChatGPTなど最新技術に関する情報を毎週お届けする
メールマガジンを発行しています。
不定期でWordPressの脆弱性情報も配信していますので、
WEB担当者やWEBを学んでいる方などにオススメの無料メールマガジンです!

メールマガジン案内ページに移動する

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

background-imageのurl指定で画像が表示されない原因
WordPressにソーシャルボタンを設置する方法とおすすめプラグイン
WordPressで日本語Googleフォント(Noto Sans JP)を使う簡単な方法
laravelのformでgetでデータを送信・取得する方法
ユーザー名もメールアドレスも忘れてしまったWordPressにログインする方法

この記事を書いた人
Toshi Seito

TEDASK代表
WordPressに関する相談実績のべ300件以上、タイムチケットでのWordPressの立ち上げお手伝いのチケット販実績240件以上!WordPressのカスタマイズから、WEBサービス制作、ホームページ制作のご相談はお任せ下さい。

Toshi Seitoをフォローする

コメント

タイトルとURLをコピーしました