laravel 5 在哪里处理 ValidationException


Where does laravel 5 handle the ValidationException?

如果传入请求是 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框架"使用,并引用了这个链接。

尚未在浏览器上测试,但我认为这也应该有效。

相关文章:
  • 没有找到相关文章