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