在 laravel 5.1 中 可以在 BaseController 中重写
/**
* {@inheritdoc}
*/
protected function buildFailedValidationResponse(Request $request, array $errors)
{
return new JsonResponse($errors);
}
可以实现拦截$this->validate($request,$rules,$messages);方法的自动跳转现在在 laravel 5.5 中没有了这个方法,现在该怎么修改?
5 回答
青春有我
TA贡献1784条经验 获得超8个赞
我自己回答这个问题吧,希望以后那些自己不能提出解决方案只会说教别人的嘴炮都闭嘴吧。
一. 仍然使用 控制器 中的$request->validate($rules);
进行校验,在表单输入不合法的时候,会抛出一个throw new ValidationException();
错误,可以在App\Exceptions\Handler
的 render()
方法中去捕获它
if ($exception instanceof ValidationException) {
return new JsonResponse($exception->getMessage());
}
二. 我们不使用 request 对象中的 validate 方法,自己构造一个验证
$validator = Validator::make($request->all(), $rules);
if ($validator->fails()) {
return new JsonResponse($validator->getMessage());
}
推荐使用第一个解决方案,仍然可以达到之前的效果,代码修改量也最小。
繁华开满天机
TA贡献1816条经验 获得超4个赞
楼主给的答案是正确的, 给5.5文档那位同学自己没有尝试过吧.
文档中虽然写了针对Ajax请求会返回json对象并且发送422状态码,但实际上异常类并没有针对Ajax请求做额外处理,需要像楼主一样手动添加处理到handler中.
- 5 回答
- 0 关注
- 662 浏览
添加回答
举报
0/150
提交
取消