概要
- laravelをAPIサーバーとして使う際にバリデーションエラーのエラーメッセージをJSONで返す方法をまとめる。
- 昔記載した下記の記事のリバイバル版の内容です。
方法
-
FormRequestクラスを継承した独自のリクエストクラスを作成する。
-
任意のバリデーションルールを記載する。
-
独自のリクエストクラスに下記の内容を追記する。
use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Contracts\Validation\Validator; protected function failedValidation(Validator $validator) { $response['errors'] = $validator->errors()->toArray(); throw new HttpResponseException(response()->json($response)); }
-
一例だが、独自のリクエストクラスに上記内容を追記した場合下記のようになる。
ContentRequest.php<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Contracts\Validation\Validator; class ContentRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'array' => ['sometimes', 'required', 'array', 'min:1'], ]; } protected function failedValidation(Validator $validator) { $response['errors'] = $validator->errors()->toArray(); throw new HttpResponseException(response()->json($response)); } }