【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',
];
}
使用可能なバリエーションルールはこちらを参考にしてください。
ルールに条件を付ける場合もこちらを参考にしてください。
参考
素晴らしい記事に感謝いたします。