改变"哎呀,看起来出了问题。"信息

时间:2014-09-03 15:43:46

标签: php laravel exception-handling laravel-4

我确定我在这里错过了一些愚蠢的话。我尝试更换Laravel在出现异常时抛出的非调试错误屏幕。它似乎忽略了下面的代码(置于start/global.php):

App::error(function(Exception $exception, $code)
{
    Log::error($exception);
    if(!Config::get('app.debug')) {
        return Response::view('errors.exception', ['message' => $exception->getMessage()], 500);
    }
});

为什么会忽略这一点?我本来应该在其他地方做些什么吗?

有点清晰:

我正在使用QueryExceptionHY000)对此进行测试。但这肯定不会有所作为吗?

使用Laravel 4.2

2 个答案:

答案 0 :(得分:2)

在没有看到你的系统的情况下很难说,但是我的第一个猜测就是在你的App:error之后发出的另一个电话覆盖了你所做的事情。重新尝试app/global.php

我刚刚写过关于Laravel sets up it's error handling recently的文章。阅读完那篇文章(或者跳过它并潜入)后,我调试的方式就是跳入

vendor/laravel/framework/src/Illuminate/Exception/Handler.php

并查看callCustomHandlers的定义。这是通过App:error

调用任何处理程序设置的方法
protected function callCustomHandlers($exception, $fromConsole = false)
{
    foreach ($this->handlers as $handler)
    {
        //...
    }
}

您的处理程序将位于$this->handlers数组中。我将一些临时调试代码添加到此类(该类可能在Laravel的单个组合优化文件中)以确定

  1. 如果您的处理程序未通过handlesException测试

  2. 如果在那之后又有另一个处理程序添加到队列中"胜出"并发送回复。

  3. 开始也不会有任何伤害
    App::error(function()
    {
        exit(__FILE__);
    });
    

    然后构建你的错误处理程序,直到它被停止被调用。那样你就知道Laravel的哪个部分有问题了。

答案 1 :(得分:1)

app/global.php中,有一个默认的错误处理程序设置。您将要删除它以使用您的,或只是修改它。

查看此信息以获取更多信息...... http://laravel.com/docs/errors#handling-errors