更改“;哎呀,好像出了什么问题";消息


Change "Whoops, looks like something went wrong." message

我肯定这里遗漏了一些愚蠢的东西。我试图替换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

很难说没有看到您的系统,但我的第一个猜测是在您的系统之后对App:error进行了另一个调用,它覆盖了您在app/global.php中尝试执行的操作。

我最近刚刚写了一篇关于Laravel如何设置它的错误处理的文章。在阅读了那篇文章(或者可能跳过它并深入研究)之后,我调试这篇文章的方法是跳到

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

并考察CCD_ 6的定义。这是通过App:error 调用任何处理程序设置的方法

protected function callCustomHandlers($exception, $fromConsole = false)
{
    foreach ($this->handlers as $handler)
    {
        //...
    }
}

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

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

  2. 如果在您的"获胜"并发送响应之后,队列中添加了另一个处理程序。

从开始也不会有什么坏处

App::error(function()
{
    exit(__FILE__);
});

然后构建错误处理程序,直到它停止被调用。这样你就知道拉拉威尔有什么问题了。

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

查看此以了解更多信息。。。http://laravel.com/docs/errors#handling-错误