laravel 处理 FormRequest 的错误信息

laravel 5.7.*

laravel 的 make:request 命令生成的 FormRequest数据验证功能非常强大, 但是美中不足的就是,如果没有通过验证默认情况下无法直接获取到错误信息, 而是会抛出一个异常, 并且状态吗是 422, 如果是MVC的开发模式,倒也没什么,可以在blade模板中获取到这些错误,然后展示, 但是如果是验证处理 Ajax 请求,就不太友好了...但是,作为最优雅的 php 框架, 这当然是可以解决的

console
response

实现

其实我也是一顿百度...有人说在 /app/Handler.php 处理统一处理异常, 然而,好像没有什么用, 可能是我弄错了..记录一下能成功的方法

  • 创建一个 BaseRequests 重写验证方法, 如果验证不通过,抛出指定格式异常信息
  • 其他验证器可选择性的继承这个 BaseRequest
  • 此时的状态是200,如果需要更改可以再 response()->json() 的第二个参数传递
errors()->first();
        // $allErrors = $validator->errors()->all(); 所有错误

        $response = response()->json([
            'code' => 0,
            'msg'  => $error,
            'data' => null,
        ]);

        throw new HttpResponseException($response);
    }
}

最后, 把我测试的代码也复制过来吧

  • web.php
Route::get('/login', 'LoginController@index');
Route::post('/login', 'LoginController@login');
  • LoginRequest
    重点是处理错误信息,规则随便处理一下就好
 'required',
            'password' => 'required',
        ];
    }
}
  • LoginController
json([
            'code' => 1,
            'msg'  => 'success',
            'data' => 'hello world',
        ]);
    }
}
  • login.blade.php



    
    
    
    How to get formRequest error messages






result

你可能感兴趣的:(laravel 处理 FormRequest 的错误信息)