大田区から発信するゆるゆる日記

主にITエンジニアに関する備忘録日記。たまに趣味も。何か不備があればコメント頂けると幸いです。Twitterアカウント https://twitter.com/ryuzan03

【Laravel】バリデーション

※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。

【目次】

 

背景

アプリで使っているLaravelでのバリデーションの知識を深めていきます。

 

Laravelのバリデーション

ValidatesRequestsトレイト

Laravelが提供しているバリデーション機能。

基本的にコントローラクラスはValidatesRequestsトレイトをデフォルトで使用しており、HTTPリクエストをバラエティー豊かなバリデーションルールでバリデーションしている。

 

トレイトについては過去記事の参照をお願いします。

 

伝統的なHTTPリクエストの場合、成功するとリダイレクトレスポンスが生成されます。一方でAJAXリクエストの場合は、JSONレスポンスが返されます。

 

使用方法

Illuminate\Http\Requestオブジェクトが提供する、validateメソッドを使います。

 

requestインスタンスを宣言し、そこからvalidateメソッドを実行する。

バリデーションルールに成功すると、コードは通常通り続けて実行されます。

逆にバリデーションに失敗すると、ユーザーに対し自動的に適切なエラーレスポンスが返されます。

 

コード

(例)コントローラ

public function store(Request $request)
{
$validatedData = $request->validate([
'title' => 'required|unique:posts|max:255',
'body' => 'required',
'author.name' => 'required', //ネストしているパラメータはドット記法
]);
}

 

注意

AJAXリクエストとバリデーション】
多くのアプリケーションで使用されているAJAXリクエストにvalidateメソッドを使う場合、Laravelはリダイレクトレスポンスを生成しません。

代わりにバリデーションエラーを全部含んだJSONレスポンスを生成します。このJSONレスポンスは422 HTTPステータスコードで送られます。

 

フォームリクエスト(カスタムリクエストクラス)

複雑なバリデーションでは、フォームリクエストを生成した方が良いです。

フォームリクエストとは、バリデーションロジックを含んだカスタムリクエストクラスです。

 

フォームリクエストはコントローラメソッドが呼び出される前にバリデーションを行います。つまり、コントローラにバリデーションロジックを散らかす必要はありません。

 

フォームリクエストクラスを作成するには、make:request Artisan CLIコマンドを使用します。作成されたクラスは、app/Http/Requestディレクトリへ設置されます。

 

バリデーションルールはrulesメソッドへ追加します。 

public function rules()
{
return [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
];
}

使用可能なバリエーションルールはこちらを参考にしてください。

ルールに条件を付ける場合もこちらを参考にしてください。

  

参考

素晴らしい記事に感謝いたします。

バリデーション 5.5 Laravel