Laravel

【Laravel】フォームでPOST通信してみる

Laravel学習続き。今回はフォーム画面からPOST通信する基礎をさらってみたいと思います。

LaravelでPOST通信する方法

今回の画面遷移仕様

add と result の2画面を用意し、add にて入力された内容を result にて表示させる仕様とします。
ビューを2枚、アクションを2個、ルーティング設定を2つ作成します。

ビューテンプレートの作成

コントローラーとビューのまとめで書いた通り、まずはビューテンプレートを用意します。

今回は HelloController の addアクションにてフォーム画面を表示させる仕様とするので、resources/views/hello/ へ、

  • add.blade.php
  • result.blade.php

の2ファイルを作成します。

add.blade.php

10行目のformのアクション指定と11行目の {{ csrf_field() }}がBladeの記述方法になっていますが、その他は普通のHTMLです。

「csrf_field()」は「ヘルパ関数」と呼ばれ、テンプレートで必要になるコードの生成を手助けしてくれる機能とのこと。CakePHPのHTMLヘルパーみたいなものでしょうか。

今回の {{ csrf_field() }} は、CSRF対策で必要な記述となり、トークンと呼ばれるランダムな文字列を input type="hidden" にて自動追加してくれます。

Laravelでは、CSRF対策が為されていないフォームの送信は例外が発生して受信できない仕組みとなっています。なので、フォームを利用する際は必ず「{{ csrf_field() }}」を用意する必要があります。

result.blade.php

ルーティング設定

テンプレートができたら、次にルーティングの設定を(/routes/web.php)にて行います。
次の2つを追記します。

1行目がフォーム用の記述で、Route::getというのは、前々回のポストにて書いたindexページ用の記述と変わりません。

2行目がPOST通信用の記述で、Route::postメソッドで設定します。
書き方自体はgetと同じで、割り当てるアドレスと、呼び出すコントローラーとアクションを書くだけ。

GETでもPOSTでもアクセスできるようにするにはPOST/GET両方の記述が必要になる気がするのですが、それで合っているのか??

コントローラー・アクションの作成

最後に、HelloControllerへ add 及び result アクションを作成します。

稼働させてみる

http://127.0.0.1:8000/hello/add へアクセスすると、、、

↑ フォームへ「ハンカチ王子」と入力し、送信ボタンをクリック

↑ 送信された内容を表示することができました

CSRF対策

↑ フォーム画面のHTMLソースを表示すると、トークンがhiddenにてセットされています。

-Laravel
-, , , , ,