概要
Laravelでは、フォームからPOSTされたリクエストパラメーターもクエリーパラメーターと同じようにRequestオブジェクトを介して取得できる。
formからのメソッド(POST)にしたがって、actionで指定した送信先に、リクエストパラメーターがHTTPリクエストのボディーに含められて送信されるactionの送信先からコントローラーのアクションにルーティング- アクションでパラメーターを取得して利用
フォーム
例として、以下のフォームを含むビューでリクエストを受け付ける。
- 入力項目=パラメーターは
user_nameとpost - メソッドは
POST actionのターゲット取得にurl()ビューヘルパーを使っているform開始タグの直後に@csrfディレクティブがあるが、これはCSRF(Cross Script Request Forgery)を防止するためのトークンを埋め込むためのもので、デフォルトではこれがないとフォーム送信時に”419 Page Expired”エラーになる
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{{-- request_form.blade.pphpのform部分 --}} <form method="post" action="{{ url('/request_result') }}"> @csrf <div> <label>名前: <input type="text" name="user_name"> </label> </div> <div> <label>コメント: <input type="text" name="post"> </label> </div> <input type="submit" value="送信"> </form> |
ルーティング
フォームからの送信が送られるactionのターゲットをコントローラーのアクションにルーティングする。この時はパラメーターについて特に関与しない。
以下は上記の例のルーティング例。
|
1 |
Route::post('/request_result', 'SampleController@showRequestResult'); |
コントローラー
ルーティングされたコントローラーのアクションで、リクエストパラメーターを取得して利用する。
必須事項
クエリーパラメーターのコントローラーにおける必須事項を参照。
アクションにおけるパラメーターの取得
Requestオブジェクトのinput()メソッド
アクションの引数で指定したRequestオブジェクトのinput()メソッドで引数にパラメーター名を指定すると、これに対応したパラメーターの値が得られる。
$request->input('パラメーター名');
$requestはアクションの引数名で任意- パラメーター名はフォーム各要素の
name属性で指定した名前
冒頭の例に対応したコントローラーの記述例は以下のとおり。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class SampleController extends Controller { public function showRequestResult(Request $request) { $user_name = $request->input('user_name'); $comment = $request->input('comment'); return view('samples.request_result', [ 'title' => 'POSTリクエストの処理', 'user_name' => $user_name, 'comment' => $comment, ]); } } |
ビューはこれらの値を使って表示される。
request()関数
Requestオブジェクトのinput()メソッドではなく、request()関数の引数にパラメーター名を指定してもパラメーターの値を取得できる。
request('パラメーター名');
先の例のアクションの部分をこれで書き換えると以下の様になる。
|
1 2 3 4 5 6 7 8 9 10 |
public function showRequestResult(Request $request) { $user_name = request('user_name'); $comment = request('comment'); return view('samples.request_result', [ 'title' => 'POSTリクエストの処理', 'user_name' => $user_name, 'comment' => $comment, ]); } |