概要
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, ]); } |