为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 5.5 中该怎么拦截表单校验失败重定向或者返回JSON的返回格式?

Laravel 5.5 中该怎么拦截表单校验失败重定向或者返回JSON的返回格式?

PHP
POPMUISE 2019-03-15 15:56:25
在 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\Handlerrender()方法中去捕获它

        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());
        }

推荐使用第一个解决方案,仍然可以达到之前的效果,代码修改量也最小。

查看完整回答
反对 回复 2019-03-18
?
largeQ

TA贡献2039条经验 获得超7个赞

你可以尝试使用
protected $messages=[

'name.required'=>'名称必须',

];

查看完整回答
反对 回复 2019-03-18
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

你绝对没有看文档

查看完整回答
反对 回复 2019-03-18
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

5.1到5.5都更新了好多了好么...还想着用5.1版本的方法...好好看看5.5的文档吧

查看完整回答
反对 回复 2019-03-18
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

楼主给的答案是正确的, 给5.5文档那位同学自己没有尝试过吧.
文档中虽然写了针对Ajax请求会返回json对象并且发送422状态码,但实际上异常类并没有针对Ajax请求做额外处理,需要像楼主一样手动添加处理到handler中.

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 662 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信