バリデーションの書き方が色々あって、よくわからなくなったので調べました。
Requestオブジェクトのvalidateメソッド
$request->validate([ 'title' => 'required|unique:posts|max:255', 'content' => 'required', ]);
受け取ったリクエストオブジェクトからそのままメソッドに繋げる書き方。
こちらを使うとバリデーション エラーが発生した場合、自動でリダイレクトされます。
readoubleより引用
Illuminate\Http\Request
オブジェクトによって提供されるvalidate
メソッドを使用します。バリデーションルールにパスすると、コードは正常に実行され続けます。しかし、バリデーションに失敗するとIlluminate\Validation\ValidationException
例外が投げられ、適切なエラーレスポンスが自動的にユーザーに返送されます。
伝統的なHTTPリクエスト処理中にバリデーションが失敗した場合、直前のURLへのリダイレクトレスポンスが生成されます。
Validatorファサード
public function store(Request $request) { $validator = Validator::make($request->all(), [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]); if ($validator->fails()) { return redirect('post/create') ->withErrors($validator) ->withInput(); } .........
Validatorファサードを使用すると、返り値としてValidatorクラスのインスタンスを受け取ります。
その返り値を元に、エラーがあった場合は、、、バリデーション をパスした場合は、、、
と後続に続けることができます。
(requestオブジェクトのように自動でリダイレクトされない)
リクエストの
readoubleより引用validate
メソッドを使用したくない場合は、Validator
ファサードを使用し、バリデータインスタンスを生成する必要があります。 このファサードのmake
メソッドで、新しいバリデータインスタンスを生成します。
ただ、このように validateメソッドを生やすと自動でリダイレクトもしてくれるようです。
Validator::make( $request->all(), [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ])->validate();
validatorヘルパ
ヘルパメソッドも、同じくバリデーターインスタンスを返してくれます。
$validator = validator($data, $rules, $messages);
readouble
validator
関数は、指定した引数で新しいバリデータインスタンスを生成します。利便のため、Validator
ファサードを代わりに使うこともできます。
ということなので、Validatorファサードと同じような使い方ができるようです。
フォームリクエスト
make:request で新しいファイルを作成し、
コントローラーと別の場所にバリデーションロジックを置くことができます。
コントローラーのメソッドに、引数として
public function store(StorePostRequest $request) { //処理内容....
このように渡すだけで、コントローラーのメソッドに入る前にバリデーションしてくれます。
バリデーションが失敗した場合、リダイレクトレスポンスが生成され、ユーザーを直前の場所に送り返します。
readouble
とのことなので、こちらも自動でリダイレクトしてくれるようです!