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

12

我在控制器中有这样的代码:

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

我在开发环境测试时,会出现Symfony页面上显示“Exception detected”的提示,但我无法在生产环境下进行测试:( 我运行了以下命令:php app/console cache:clear --env=prod --no-debug,然后只替换URL中的app_dev.phpapp.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>

我应该在哪里提供status_codestatus_text的值?或者它们是从异常中获取的吗?

总的来说,我想做的是当控制器操作中的条件为真时,在生产环境中显示我的自定义错误页面。我已经完成了吗?如果没有,如何实现以及如何在生产环境中查看结果?

5个回答

16

我也尝试了一下,发现自定义错误页面放在app/Resources/TwigBundle/views/Exception/error.html.twig只在生产环境下起作用。


1
对于任何通过谷歌搜索到这里的人:尝试在 index.php 中强制设置 $useDebugging = false;。之后您需要清除缓存。 - gArn
1
对我来说,这个不起作用。而且我不知道为什么。我甚至清除了缓存。我使用的是3.1.3版本。 - Jakob Alexander Eichler
如果我将名为exception_full.html.twig的文件放在目录中,它可以正常工作。但是,所有错误模板都将被覆盖。但是,我需要为每个错误代码使用不同的模板... Symfony文档说我必须放置一个名为errorxxx.html.twig(xx是错误代码)的文件。但是,它并不像这样工作。有什么想法吗?(https://symfony.com/doc/current/controller/error_pages.html) - Diego Favero

14

迟做总比不做好,我想..

您可能已经知道了模板的覆盖。 您可以覆盖任何想要的模板。 因此,如果您想为了调试而覆盖开发错误页面,那么您应该覆盖模板:

exception_full.html.twig

您可以通过在此文件夹中创建这样的文件来实现:

app/Resources/TwigBundle/views/Exception

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


1
我不得不清除缓存(SF2.1)才能看到被覆盖的模板。这是目前找到的最佳解决方法。 - Pierre de LESPINAY
如果我将名为exception_full.html.twig的文件放在目录中,它可以正常工作。但是,所有错误模板都将被覆盖。但是,我需要为每个错误代码使用不同的模板... Symfony文档说我必须放置一个名为errorxxx.html.twig(xx是错误代码)的文件。但是,它并不像这样工作。有什么想法吗?(https://symfony.com/doc/current/controller/error_pages.html) - Diego Favero

9
您可以通过以下方式访问检测到的文本:
{{ exception.message }}

5

我已经阅读了它们并按照指示做了,但是我卡在开发环境上,不知道它是否正常工作以及如何查看结果。 - Faery
2
在生产环境中尝试它,错误会显示在开发环境中(以帮助您),因此它将无法正常工作。 - Snroki
4
如果您的回答也在StackOverflow上而不是在可能会更改或移动的外部链接中,那么您的回答会更好。 - AsTeR
2
这并没有回答问题。OP正在询问如何在dev中查看prod错误模板。 - Pierre de LESPINAY

3
Symfony似乎有一种新的方式,可以让您在开发环境中查看错误页面模板。从他们的文档中获取:
当您处于开发环境中时,Symfony会显示大型异常页面,而不是您闪亮新的自定义错误页面。那么,您如何查看它的外观并进行调试呢?
幸运的是,默认的ExceptionController允许您在开发过程中预览错误页面。
要使用此功能,您需要在routing_dev.yml文件中添加以下定义:
# app/config/routing_dev.yml
_errors:
    resource: "@TwigBundle/Resources/config/routing/errors.xml"
    prefix:   /_error

阅读更多:Symfony错误页面手册


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