リクエストパラメータについて
下記リクエストの受け取り方を確認してみる。
[
'name' => '山田太郎',
'age' => 25,
'job' => 'student',
]
リクエストを1つずつ受け取る
inputを使用すると、リクエストパラメータを1つずつ取得できる。
public function getUserInfo(Request $request){
// ユーザー情報を取得する処理
$name = $request->input('name'); //山田太郎
$age = $Request->input('age'; //25
$job = $request->input('job'); //student
}
LaravelのIlluminate\Http\Requestクラスでは、リクエストパラメータにアクセスする際、動的プロパティ(例:$request->name)を使用すると、次の優先順位で値が取得される。
1. クエリパラメータ(GET)やPOSTデータ(フォーム送信)
2. ルートパラメータ(ルーティングで定義されたパラメータ)
同じ名前の値が両方に存在する場合は、リクエスト(GET/POST)側が優先される。
例:以下のようなルートがあるとする
Route::get('/user/{name}', [UserController::class, 'getRequestDemo']);
URLが
/user/花子?name=太郎&age=20&job=student
//このとき、$request->name は「花子」ではなく「太郎」を返す
//(クエリの name=太郎 が優先されるため)
明示的に値を取得したい場合
クエリパラメータだけ取得したい
$name = $request->query('name');
POSTデータだけ取得したい
$name = $request->post('name');
ルートパラメータだけ取得したい
$name = $request->route('name');
リクエストをまとめて受け取る
受け取りたいパラメータを指定して、連想配列で受け取る場合はonlyを使用する。
public function getUserInfo(Request $request){
// ユーザー情報を取得する処理
$userIufo =$request->only('name','age','job');
//[
'name' => '山田太郎',
'age' => 25,
'job' => 'student',]
}
受け取りたくないパラメータを指定して連想配列で受け取る場合は、exceptを使用する。
public function getUserInfo(Request $request){
// ユーザー情報を取得する処理
$userIufo =$request->expect(['name']);
//['age', 'job'];
}
全てまとめてリクエストパラメータを受け取る場合は、allを使用する。
ですが、$request->all() を使うと、全ての入力データ(クエリパラメータ、POSTデータなど)を無条件で受け取るため、意図しない値や不要な値まで取り込んでしまうリスクがあるので明示的に必要なデータだけを受け取る方法が望ましい。
public function getUserInfo(Request $request){
// ユーザー情報を取得する処理
$userIufo =$request->all();
//[
'name' => '山田太郎',
'age' => 25,
'job' => 'student',
}