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

如何显示自定义404错误页面-Symfony2,symfony,twig,Symfony,Twig,我的控制器中有: if(some stuff) { throw $this->createNotFoundException('message'); } 当我在dev env中测试它时,我的文本检测到Symfony的页面告诉异常,但我无法在prod env中测试它:(我运行这个php应用程序/控制台缓存:clear--env=prod--no debug,然后只在URLapp_dev.php中替换为app.php,但工具栏和Symfony的错误页面保持不变 我创建了这个文件-ap

我的控制器中有:

if(some stuff) {
    throw $this->createNotFoundException('message');
}
当我在dev env中测试它时,我的文本检测到Symfony的页面告诉异常,但我无法在prod env中测试它:(我运行这个
php应用程序/控制台缓存: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_text}}
哎呀!发生了一个错误
服务器返回一个“{status\u code}}{{{status\u text}}”。
我应该在哪里为
status\u code
status\u text
提供值?还是从异常中获取值

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

阅读文档

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


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

我想迟做总比不做好

您可能知道模板的重写。 您可以覆盖所需的任何模板。 因此,如果您想覆盖dev error页面(仅用于调试),则应覆盖模板:

exception_full.html.twig
您可以通过在此文件夹中创建这样的文件来执行此操作:

app/Resources/TwigBundle/views/Exception

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

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

{{ exception.message }}

Symfony似乎有了一种新的方法,允许您在开发环境中查看错误页面模板。摘自他们的文档:

当您在开发环境中时,Symfony会显示大异常页面,而不是闪亮的新自定义错误页面。那么,您如何查看它的外观并对其进行调试呢

幸运的是,默认的ExceptionController允许您在开发过程中预览错误页面

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


阅读更多内容:

我已经阅读了它们并按照它们所说的做了,但是我仍然坚持使用dev-env,我不知道它是否工作以及如何查看结果。请在prod-env中尝试,错误会显示在dev中(以帮助您)所以它不起作用。如果answer的元素也在StackOverflow中,而不是在可能更改或移动的外部链接中,您的答案会更好。这并不能回答问题。OP要求在开发人员中查看产品错误模板。我必须清除缓存(SF2.1)为了能够看到被覆盖的模板。找到了最好的工作区。如果我在目录中放置一个名为exception_full.html.twig的文件,效果很好。但是。所有错误模板都将被它覆盖。但是,我需要为每个错误代码设置不同的模板…sfy docs说我必须放置一个名为errorxxx.html.twig的文件(xx是错误代码).但是,它不是这样工作的。你知道吗??()对于在这里搜索的任何人:尝试在
index.php
中强制执行
$usedebughting=false;
。之后需要清除缓存。对我来说,这不起作用。我不知道为什么。我甚至清除了缓存。如果我在目录中放置了名为exception\u full.html.twig的文件,我会使用版本3.1.3。但是,所有的错误模板都很好s将被它覆盖。但是,我需要为每个错误代码使用不同的模板…sfy docs说我必须放置一个名为errorxxx.html.twig的文件(xx是错误代码)。但是,它不是这样工作的。你知道吗??()
# app/config/routing_dev.yml
_errors:
    resource: "@TwigBundle/Resources/config/routing/errors.xml"
    prefix:   /_error