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