FormRequestでバリデーション失敗時にJson形式でレス返却する

目次

はじめに

現在、業務でLaravelでAPI開発をしていて、バリデーションの失敗時の処理を備忘録

FormRequest

公式引用

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

コントローラーにバリデーションを記述したりしますが、バリデーションが複雑になると可動性を保つ為にもバリデーションの責務を負ったクラスが欲しくなります。

作成方法

php artisan make:request FormRequestName

メソッド紹介

  • authorize
  • rules
  • failedValidation <-- 今回ここ

authorize

falseを返すと、403ステータスコードのHTTPレスポンスが自動的に返され、コントローラメソッドは実行されません。

trueを返すとコントローラーへ飛ばす

rules

バリデーションルールを記述

failedValidation

HttpResponseException例外インスタンスを投げる場合に使用する

公式引用

readouble.com

バリデーション例外を含むすべての例外は、例外ハンドラにより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(...);

readouble.com

参考

【Laravel5】FormRequestのバリデーション結果をJSON APIで返す - Qiita

【Laravel5】FormRequestのバリデーション結果をJSON APIで返す - Qiita

バリデーション 5.8 Laravel