如何显示自定义的404错误页面 - Symfony2

时间:2012-09-28 06:49:42

标签: symfony twig

我在控制器中有这个:

if(some stuff) {
    throw $this->createNotFoundException('message');
}

当我在dev env中测试它时,我得到了Symfony的页面,告诉我用我的文本检测到Exception,但我无法在prod env中测试它:(我运行此php app/console cache:clear --env=prod --no-debug然后只在URL中替换app_dev.php app.php,但工具栏和Symfony的错误页面保留。

我创建了这个文件 - app/Resources/TwigBundle/views/Exception/error.html.twig。它会在prod中呈现吗?

就在其中:

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>An Error Occurred: {{ status_text }}</title>
</head>
<body>
    <h1>Oops! An Error Occurred</h1>
    <h2>The server returned a "{{ status_code }} {{ status_text }}".</h2>
</body>
</html>

我应该在哪里为status_codestatus _text提供值?或者他们是从例外中获取的?

所以一般来说我想要做的是当我的控制器动作中的条件为真时,我的自定义错误页面将显示在prod env中。我是否已经制作,如果没有,如何制作以及如何在prod env中查看结果?

5 个答案:

答案 0 :(得分:16)

我也尝试过,我注意到app / Resources / TwigBundle / views / Exception / error.html.twig中的自定义错误页面仅在prod环境中有效。

答案 1 :(得分:14)

迟到总比我想的要好......

您可能知道重写模板。 您可以覆盖所需的任何模板。 因此,如果您想覆盖开发错误页面,仅用于调试,那么您应该覆盖模板:

exception_full.html.twig

您可以通过在此文件夹中创建此类文件来执行此操作:

app/Resources/TwigBundle/views/Exception

现在,您将在开发模式下看到自定义的404。

答案 2 :(得分:8)

您可以通过以下方式访问检测到的文字:

{{ exception.message }}

答案 3 :(得分:5)

答案 4 :(得分:3)

看来Symfony有一种新的方式允许您在开发环境中查看错误页面模板。取自他们的文档:

  

当您处于开发环境中时,Symfony会显示大异常页面而不是您闪亮的新自定义错误页面。那么,你怎么看到它的样子并进行调试呢?

     

幸运的是,默认的ExceptionController允许您在开发期间预览错误页面。

     

要使用此功能,您需要在routing_dev.yml文件中有一个定义,如下所示:

# app/config/routing_dev.yml
_errors:
    resource: "@TwigBundle/Resources/config/routing/errors.xml"
    prefix:   /_error

了解详情:Symfony Error Pages Manual