🗂
Laravel FormRequestクラスのバリデーション前後でよく使うメソッド
Laravel FormRequestクラスのメソッドでよく使うメソッド
validationDataは、バリデーションのデータを加工して特にコントローラーではリクエストの値を取得する必要がない時、
prepareForValidationは、バリデーション前にリクエストデータを加工して、コントローラーでリクエストの値を取得したい時、
passedValidationは、バリデーション後にリクエストデータを加工して、コントローラーに引き渡したいときに使うようですね。
たとえば、Restfull APIで開発するときにuser_idをパラメータにしたある場合
// api.php
Route::get('/users/{user_id}', 'Api\UsersController@getUser');
// GetUserRequest.php
// バリデーション前にデータを加工
protected function validationData()
{
// api.phpの{user_id}の値を取得する
$params = $this->all();
$user_id = $this->route('user_id');
return $params + ['user_id' => $user_id];
}
// バリデーションの前にデータを加工
// URIからパラメータを取得して、リクエストの値を直接したりできる
// $this->mergeでRequestオブジェクトにデータが格納されてコントローラーで取得できる
protected function prepareForValidation() {
$this->merge(['user_id' => $this->route('user_id') ]);
}
// UsersController.php
public function getUser(GetUserRequest $request){
$params = $request->only(['user_id']);
}
// バリデーション後にデータを加工する場合
protected function passedValidation()
{
// バリデーションが成功した場合の処理をここに記述します
// 例: データベースにデータを保存する
// $this->validated() でバリデーションを通過したデータにアクセスできます
$data = $this->validated();
// データベースに保存する例
// User::create($data);
// または、コントローラーにデータを渡す場合
// $this->merge(['extra_data' => 'some_value']);
}
/**
* withValidator
* コントローラーでRequestFromクラスから取れるようにする。
* @param [type] $validator
* @return void
*/
protected function withValidator($validator)
{
// バリデータが作成された後に実行される処理
$validator->after(function ($validator) {
// バリデーションが成功した場合に追加のデータをリクエストに追加
$interviewFbId = $validator->getData()['interview_fb_id'];
$this->merge(['interview_fb_id' => $interviewFbId]);
});
}
Discussion