Laravelにおけるバリデーション処理と例外エラー処理について質問です。
スマートフォン向けアプリを制作しています。
環境は
Laravel 5.5
PHP 7.2.4
また、アルチザンコマンドを使って
App\Http\Controllers\TestController
App\Http\Requests\TestFormRequest
を作成しました。
PHP
1**TestController** 2 3 public funtion store(Request $request) 4 { 5 $param = [ 6 'name' => $request->json('name'), // あああ 7 'password' => $request->json('password'), // 123456789 8 ]; 9 return new JsonResponse($param); 10 }
JSON
1{ 2"name": "あああ", 3"password": "123456789" 4}
と返ります。
次に、例外エラーの際にJson形式で返却したく、App\Exceptions\Handlerのrenderを
PHP
1 public function render($request, Exception $exception) 2 { 3// return parent::render($request, $exception); 4 $code = $exception->getCode(); 5 $message = $exception->getMessage(); 6 7 $error = [ 8 'code' => $code, 9 'message' => $message, 10 ]; 11 return new JsonResponse($error); 12 } 13
のように書き換えました。
以下の場合ですと
PHP
1**TestController** 2 3 public funtion store(Request $request) 4 { 5 throw new \Exception('例外エラーです。', '9999999'); 6 }
JSON
1{ 2"code": 9999999, 3"message": "例外エラーです。" 4}
と返却されるようになりました。ここまでは期待通りなのですが、
バリデーション処理においても同様に例外処理として動作させたいです。
試したこととしては、FormRequestを使ったバリデーションです。
PHP
1**TestController** 2 public function store(TestFormRequest $request) 3 { 4 // 5 $param = [ 6 'name' => $request->json('name'), // null 7 'password' => $request->json('password'), // 123456789 8 ]; 9 } 10 11**TestFormRequest** 12 public function rules() 13 { 14 return [ 15 'name' => 'required', 16 'password' => 'required|min:8', 17 ]; 18 } 19 public function messages() 20 { 21 return [ 22 'name.required' => "aaaaaaaaaa", 23 'password.required' => "bbbbbbb", 24 'password.min' => "bbbbbbb", 25 ]; 26 }
インターネットで調べつつ、見よう見まねでこちらのように実装したところ、
nameをnullにすると
JSON
1{ 2"code": 0, 3"message": "The given data was invalid." 4}
と返却されました。
値を入力すると正常に通るので、バリデーションは成功しているようなのです。
こちらのメッセージはValidationExceptionの__constructでデフォルトで表示している文言のようでした。
バリデーションで引っ掛けた場合も
PHP
1throw new \Exception('名前を入力してください', '123456789');
と同じように、任意のメッセージとエラーコードを返却するような処理を実現したいです。
希望としては、例外はthrowで返すなどしてreturnは1回のみにしたいです。
まとめると、
nameを入力していない場合にバリデーション処理で
JSON
1{ 2"code": 123456789, 3"message": "名前を入力してください" 4}
passwordを7文字以下で入力した場合
JSON
1{ 2"code": 123456789, 3"message": "パスワードは8文字以上で入力してください" 4}
というように同じフォーマットでエラーとして返却したいです。
情報の過不足があればご指摘頂ければと思います。
ご回答の程、よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。