Laravelのバリデーションの種類

Laravel

バリデーションの書き方が色々あって、よくわからなくなったので調べました。

Requestオブジェクトのvalidateメソッド

$request->validate([ 
          'title' => 'required|unique:posts|max:255', 
          'content' => 'required', 
         ]);

受け取ったリクエストオブジェクトからそのままメソッドに繋げる書き方。

こちらを使うとバリデーション エラーが発生した場合、自動でリダイレクトされます。

Illuminate\Http\Requestオブジェクトによって提供されるvalidateメソッドを使用します。バリデーションルールにパスすると、コードは正常に実行され続けます。しかし、バリデーションに失敗するとIlluminate\Validation\ValidationException例外が投げられ、適切なエラーレスポンスが自動的にユーザーに返送されます。

伝統的なHTTPリクエスト処理中にバリデーションが失敗した場合、直前のURLへのリダイレクトレスポンスが生成されます

readoubleより引用

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オブジェクトのように自動でリダイレクトされない)

リクエストのvalidateメソッドを使用したくない場合は、Validatorファサードを使用し、バリデータインスタンスを生成する必要があります。 このファサードのmakeメソッドで、新しいバリデータインスタンスを生成します

readoubleより引用

ただ、このように validateメソッドを生やすと自動でリダイレクトもしてくれるようです。

Validator::make(
   $request->all(), [     
     'title' => 'required|unique:posts|max:255',    
     'body' => 'required', 
])->validate();

validatorヘルパ

ヘルパメソッドも、同じくバリデーターインスタンスを返してくれます。

$validator = validator($data, $rules, $messages);

validator関数は、指定した引数で新しいバリデータインスタンスを生成します。利便のため、Validatorファサードを代わりに使うこともできます。

readouble

ということなので、Validatorファサードと同じような使い方ができるようです。

フォームリクエスト

make:request で新しいファイルを作成し、
コントローラーと別の場所にバリデーションロジックを置くことができます。

コントローラーのメソッドに、引数として

public function store(StorePostRequest $request) {

   //処理内容....

このように渡すだけで、コントローラーのメソッドに入る前にバリデーションしてくれます。

バリデーションが失敗した場合、リダイレクトレスポンスが生成され、ユーザーを直前の場所に送り返します。

readouble

とのことなので、こちらも自動でリダイレクトしてくれるようです!

タイトルとURLをコピーしました