Laravel 4仅在生产环境下显示自定义错误页面

7

我理解得对吗:如果我想显示自定义的403、404等错误页面,我应该检查是否将app.debug设置为false:

if (!Config::get('app.debug')) {
    App::error(function(Exception $exception, $code)
    {
        switch ($code) {
            case 403:
                return Response::view('errors.403', array(), 403);

            case 404:
                return Response::view('errors.404', array(), 404);

            case 500:
                return Response::view('errors.500', array(), 500);

            default:
                return Response::view('errors.default', array(), $code);
        }
        Log::error($exception);
    });
}

因为,如果我在没有检查app.debug的情况下设置了App::error处理程序,我将始终获得这些自定义页面而不是详细信息。我说得对吗?

我的第一个想法是使用Laravel的环境配置,但我可能错了。 - Mike Sherrill 'Cat Recall'
1
你想说使用App::environment()来检查,而不是app.debug变量吗?我刚刚了解了环境相关的知识,真是太神奇了,我可以在生产环境中自动覆盖app.debug变量。 - Victor
你也可以使用 if (!App::environment('local'){} 或者你的开发环境所命名的任何内容。 - JoshP
通常我会创建一个名为isProduction()的简单函数,作为App:environment('production')的快捷方式,以使事情变得更加容易。 - trm42
1个回答

10

您可以将if语句移至app::error函数中。这样错误总是被记录,当app.debug为false时才显示自定义错误页面。

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

    if (!Config::get('app.debug')) {
        return Response::view('errors.index', $code);
    }
});

修复语法错误,在返回语句中删除多余的 ')'。 - Rashi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接