当前位置:  开发笔记 > 编程语言 > 正文

FormRequest失败验证返回500错误而不是422错误(5.2升级后)

如何解决《FormRequest失败验证返回500错误而不是422错误(5.2升级后)》经验,为你挑选了1个好方法。

在从L5.1更新到L5.2之后,我不再接收JSON对象作为对失败的FormRequest的响应(即在AJAX发布请求上).

通常我会收到422回复,如:

[
    email: 'E-mail is invalid',
    firstname: 'Firstname must be at least 2 characters'
]

但现在我收到500错误页面:

500响应页面

我已确保我的AJAX调用都application/json作为Accept标题.

更新

不,我不是手动捕获此异常.我正在使用Laravel提供的默认FormRequest.正如他们在文档中所述:在AJAX请求期间使用validate方法时,Laravel不会生成重定向响应.相反,Laravel会生成包含所有验证错误的JSON响应.此JSON响应将与422 HTTP状态代码一起发送.

像这样:php artisan make:request StoreBlogPostRequest(https://laravel.com/docs/5.1/validation#form-request-validation)



1> 小智..:

@Mattias!

我最近遇到了同样的问题,我浪费了两个多小时试图了解导致此问题的真正原因。在.env文件中禁用调试会导致表单验证显示500,因为FormValidator抛出ValidationException(并且未处理)。该问题的解决方案是:打开app \ Exceptions \ Handler.php

private function handleExceptions($e)
    {
       // Add anywhere in this method the following code
       // It does what the FormValidator does.

        if($e instanceof ValidationException) {

            return redirect()->back()->withErrors($e->validator->getMessageBag()->toArray());
        }

        return response()->view('errors.500', [], 500);
    }

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有