お世話になってます。
Laravelのバリデーションの実装をしており、自作したFormRequest下記のように記述し
バリデーションが発生したらJSONでcodeとmessagesを返すようにしました。
しかし、この書き方ではフォームが増えたらその数だけfailedValidationのif文を
追加しないといけないと思いコンパクト化を試みてます。
フォームが増えてもrulesメソッドの追加だけにしたい為
継承しているFormRequestクラスのfailedValidationメソッドを書き換えるなど
試行錯誤しているのですがうまく実装出来ません。
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Contracts\Validation\Validator; use Illuminate\Http\Exceptions\HttpResponseException; class LikeRequest 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 [ 'to_user_id' => 'required' ]; } //デフォルトのものに下記メソッドを追加 protected function failedValidation(Validator $validator) { $response['code'] = 'XXX'; //もしidにエラーがあれば if($validator->errors()->has('to_user_id')) { $response['message'] = $validator->errors()->first('to_user_id'); throw new HttpResponseException(response()->json($response, 422)); } } }
試行錯誤内容としましては
・既存のFormRequestクラスのfailedValidationメソッドを下のように変えても protected function failedValidation(Validator $validator) { throw (new ValidationException($validator)) ->errorBag($this->errorBag) ->redirectTo($this->getRedirectUrl()); } ↓ ↓ ↓ protected function failedValidation(Validator $validator) { $response['code'] = 'XXX'; if($validator->errors()->has($xxxxxxxxx)) { $response['message'] = $validator->errors()->first($xxxxxxxxx); throw new HttpResponseException(response()->json($response, 422)); } } $xxxxxxxxxの箇所を汎用的に使用できる変数にして この部品だけですべてのすべてのバリデーション処理ができるようにさせたい と色々試しております。
コーディング簡略化に自信のある人がいましたら
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー