如果传入请求是 AJAX 请求,则不会生成重定向。相反,具有 422 状态代码的 HTTP 响应将返回到包含验证错误的 JSON 表示的浏览器。
这不行!我试图通过 ajax 请求访问路由,然后重定向回来。
如果验证通过,您的代码将继续正常执行。但是,如果验证失败,将抛出 Illuminate\Contracts\Validation\ValidationException。将自动捕获此异常,并为用户的先前位置生成重定向。验证错误甚至会自动闪现到会话中!
现在我想知道 laravel 在哪里捕获此异常以便我可以修改它?
2 回答
这是在 FormRequest 类中处理的:
您可以在自己的 Request 对象中覆盖此函数,并以您喜欢的任何方式处理失败的验证。
经过一段时间的研究后,我会发布我的结果,所以有这个问题的人可以节省很多时间。
@Faiz,如果你想坚持 laravel 行为,你在技术上不应该改变一件事(我总是试图遵循泰勒的建议)。因此,要获得 422 响应代码状态,您需要告诉phpunit您将发送XMLHttpRequest。也就是说,这适用于 laravel 5
有关Github 问题的更多信息。此外,如果你看
Symfony\Component\HttpFoundation\Request@isXmlHttpRequest
,你会发现这个标题被“常见的 JavaScript 框架”使用并引用这个链接尚未在浏览器上进行测试,但我认为这也应该有效。