Laravel在添加自定义错误页面后不显示调试消息

时间:2015-02-22 09:15:15

标签: php laravel web error-handling

我希望我的Laravel(4.2)网站在发生错误时返回一些自定义错误消息(而不是Whoops, looks like something went wrong.),所以我添加了以下内容:

App::error(function(Exception $exception, $code)
{
    Log::error($exception);

    return Response::view('errors.500', [], 500);
});

use Illuminate\Database\Eloquent\ModelNotFoundException;
App::error(function(ModelNotFoundException $e)
{
    return Response::view('errors.404', [], 404);
});

app/start/global.php

要测试我暂时更改的网页:'debug' => false

中的app/config/local/app.php

我的自定义错误页面正确显示(发生错误时)。但是,即使我将本地开发配置还原为'debug' => true,它们仍然显示(而不是带有堆栈跟踪和错误消息的错误页面)。

我尝试将以下内容粘贴到app/start/local.php,希望在laravel处于本地环境时覆盖全局错误处理。但这并没有解决问题。

App::error(function(Exception $exception, $code)
{
    Log::error($exception);
});

use Illuminate\Database\Eloquent\ModelNotFoundException;
App::error(function(ModelNotFoundException $e)
{
    Log::error($exception);    
});

如何再次制作laravel显示错误堆栈跟踪?

1 个答案:

答案 0 :(得分:2)

问题在于,如果你从App::error处理程序返回一些内容,Laravel会将其用作响应并停止“冒泡”。

最简单的方法就是检查app.debug配置:

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

use Illuminate\Database\Eloquent\ModelNotFoundException;
App::error(function(ModelNotFoundException $e)
{
    if(Config::get('app.debug') !== true){
        return Response::view('errors.404', [], 404);
    }
});