控制器验证

最后更新于:2022-04-01 15:10:37

当然,如果每一次需要验证的时候都手动的建立并且验证 Validator 实例会非常的麻烦。不用担心,你有其他的选择!Laravel自带的 `App\Http\Controllers\Controller` 基类使用了一个 `ValidatesRequests `的 `trait`。这个 `trait `提供了一个单一的、便捷的方法来验证 HTTP 请求。代码如下: ~~~ /** * Store the incoming blog post. * * @param Request $request * @return Response */ public function store(Request $request) { $this->validate($request, [ 'title' => 'required|unique|max:255', 'body' => 'required', ]); // } ~~~ 如果验证通过了,你的代码会正常继续执行。如果验证失败,那么会抛出一个 `Illuminate\Contracts\Validation\ValidationException` 异常。这个异常会被自动捕获,然后重定向至用户上一个页面。而错误信息甚至已经存储至 session 中! 如果收到的是一个 AJAX 请求,那么不会生成一个重定向。相反的,一个带有 422 状态码的 HTTP 响应会被返回给浏览器,包含了一个含有错误信息的 JSON 对象。 比如,如下是手动创建验证的等效写法: ~~~ /** * Store the incoming blog post. * * @param Request $request * @return Response */ public function store(Request $request) { $v = Validator::make($request->all(), [ 'title' => 'required|unique|max:255', 'body' => 'required', ]); if ($v->fails()) { return redirect()->back()->withErrors($v->errors()); } // } ~~~ ## 自定义闪存后的错误格式 如果你想要自定义验证失败后已经闪存至 session 的错误消息格式,可以通过覆盖基类控制器的 `formatValidationErrors`。不要忘记在文件顶部引入 `Illuminate\Validation\Validator` 类。 ~~~ /** * {@inheritdoc} */ protected function formatValidationErrors(Validator $validator) { return $validator->errors()->all(); } ~~~
';