【问题标题】:Where does laravel 5 handle the ValidationException?laravel 5 在哪里处理 ValidationException?
【发布时间】:2015-05-09 04:22:21
【问题描述】:

如果传入请求是 AJAX 请求,则不会重定向 生成。相反,带有 422 状态代码的 HTTP 响应将是 返回到浏览器,其中包含 验证错误。

这行不通!我正在尝试通过 ajax 请求访问路由并重定向回来。

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

现在我想知道 laravel 在哪里捕捉到这个异常以便我可以修改它?

【问题讨论】:

  • 您是在 Controller 还是 FormValidation 中执行此操作?
  • @TheShiftExchange 我在 FormValidation 中进行操作

标签: php validation laravel laravel-5


【解决方案1】:

在研究了一段时间后,我将发布我的结果,以便任何有此问题的人节省大量时间。

@Faiz,如果你想坚持 laravel 的行为,从技术上讲你不应该改变任何事情(我会一直尝试遵循 taylor 的建议)。因此,要接收 422 响应代码状态,您需要告诉 phpunit 您将发送一个 XMLHttpRequest。也就是说,这适用于 laravel 5

        $response = $this->call('POST', $url, [], [], [],
        ['HTTP_X_Requested-With' => 'XMLHttpRequest']);

更多信息请访问Github Issues。另外,如果你看Symfony\Component\HttpFoundation\Request@isXmlHttpRequest你会发现这个header被“常见的JavaScript框架”使用,引用this link

尚未在浏览器上进行测试,但我认为这应该也可以。

【讨论】:

    【解决方案2】:

    这是在 FormRequest 类中处理的:

    protected function failedValidation(Validator $validator)
    {
        throw new HttpResponseException($this->response(
            $this->formatErrors($validator)
        ));
    }
    

    您可以在自己的 Request 对象中覆盖此函数,并以任何您喜欢的方式处理失败的验证。

    【讨论】:

    • 不过,文档说此行为将由框架完成。这不是错误吗?
    猜你喜欢
    • 1970-01-01
    • 2015-05-22
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2015-04-05
    • 1970-01-01
    • 2012-05-27
    相关资源
    最近更新 更多