LaravelのFormRequestでAjaxに対応させる
確認に使ったLaravelのバージョンは5.8です。
Laravelのフォームリクエストを使うと、記述したルールでのバリデーションを使ってバリデーションを行い、エラーがあった場合はエラー内容を持って前の画面に戻る、というのを行ってくれます。
コントローラー内に処理を書かなくて良くなり、コントローラーが見やすくなるので、APIの実装にも使いたいけどエラー内容をjsonで返すのどうやるんだろ?ていうときの書き方です。
protected function failedValidation(Validator $validator)
{
if (request()->expectsJson()) {
$response['errors'] = $validator->errors()->toArray();
throw new HttpResponseException(
response()->json( $response, 422 )
);
}
}
フォームリクエストクラス内に上記メソッドを追加します。
最初のif文でAjaxリクエストかどうか判定しています。Ajaxリクエストじゃない場合は何もせず通常通りとなりますので、Ajax、htmlのformどちらからのリクエストにも対応しています。