FormRequestでバリデーション失敗時にJson形式でレス返却する
目次
はじめに
現在、業務でLaravelでAPI開発をしていて、バリデーションの失敗時の処理を備忘録
FormRequest
公式引用
コントローラーにバリデーションを記述したりしますが、バリデーションが複雑になると可動性を保つ為にもバリデーションの責務を負ったクラスが欲しくなります。
作成方法
php artisan make:request FormRequestName
メソッド紹介
- authorize
- rules
- failedValidation <-- 今回ここ
authorize
falseを返すと、403ステータスコードのHTTPレスポンスが自動的に返され、コントローラメソッドは実行されません。
trueを返すとコントローラーへ飛ばす
rules
バリデーションルールを記述
failedValidation
HttpResponseException例外インスタンスを投げる場合に使用する
公式引用
バリデーション例外を含むすべての例外は、例外ハンドラによりHTTPレスポンスへ変換されています。
//追加
use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;
protected function failedValidation(Validator $validator)
{
$response = [// バリデーション失敗時の返却レスポンス作成];
throw new HttpResponseException(response()->json(.$response, 422));
}
使用方法
**controller.php
//追加
use App\Http\Requests\FormRequestName;
//Request -> FormRequestNameに変更
public function store(FormRequestName $request)
{}
豆知識
この書き方で[storage] > [logs]に残る
Laravelはデフォルトで、アプリケーションの日別ログファイルをstorage/logsディレクトリへ作成するように設定されています。
\Log::error(...);
参考
【Laravel5】FormRequestのバリデーション結果をJSON APIで返す - Qiita