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

Fae*_*ery 12 symfony twig

我在我的控制器中有这个:

if(some stuff) {
    throw $this->createNotFoundException('message');
}
Run Code Online (Sandbox Code Playgroud)

当我在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.它会在生产中呈现吗?

这是在:

<!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>
Run Code Online (Sandbox Code Playgroud)

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

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

Cho*_*hop 16

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


Jim*_*oot 14

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

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

exception_full.html.twig
Run Code Online (Sandbox Code Playgroud)

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

app/Resources/TwigBundle/views/Exception
Run Code Online (Sandbox Code Playgroud)

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


met*_*eor 8

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

{{ exception.message }}
Run Code Online (Sandbox Code Playgroud)


Upv*_*ote 5

阅读文档http://symfony.com/doc/2.0/cookbook/controller/error_pages.html

自定义404页面和其他错误页面

http://symfony.com/doc/2.0/cookbook/controller/error_pages.html#customizing-the-404-page-and-other-error-pages

  • 如果答案的元素也在StackOverflow而不在可能改变或移动的外部链接中,那么你的回答会更好. (4认同)
  • 在prod env中尝试它,错误显示在dev(帮助你),所以它不起作用. (2认同)
  • 这不能回答这个问题.OP要求在dev中查看prod错误模板. (2认同)