laravel 5在哪里处理ValidationException?

时间:2015-03-07 17:32:10

标签: php validation laravel laravel-5

  

如果传入请求是AJAX请求,则不会进行重定向   产生。相反,具有422状态代码的HTTP响应将是   返回到包含JSON表示的浏览器   验证错误。

这不起作用!我试图通过ajax请求访问路由,然后重定向回来。

  

如果验证通过,您的代码将继续正常执行。但是,如果验证失败,将抛出Illuminate \ Contracts \ Validation \ ValidationException。将自动捕获此异常,并为用户的先前位置生成重定向。验证错误甚至会自动闪现到会话中!

现在我想知道laravel在哪里捕获此异常以便我可以修改它?

2 个答案:

答案 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

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