2012-09-28 93 views
10

我有这个在我的控制器:如何显示自定义404错误页面 - Symfony2的

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

当我在dev的包膜测试它,我与我的文字检测的Symfony的页面告诉例外,但我可以”吨督促ENV测试它:(我运行这个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值?或者他们被从例外中拿走?

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

回答

15

我也试过,我注意到,自定义错误页放置在app /资源/ TwigBundle/views/Exception/error.html.twig只能在产品环境中使用。

比从来没有我想
+1

对于任何人在这里使用Google搜索:尝试在'index.php'中强制'$ useDebugging = false;'。之后您需要清除缓存。 – gArn

+1

对我来说这是行不通的。同时我不知道为什么。我甚至清除了缓存。我使用的版本是3.1.3 –

+0

如果我把一个名为exception_full.html.twig的文件放在目录中就可以正常工作。但。所有的错误模板将被它覆盖。但是,我需要为每个错误代码使用不同的模板... sfy文档说我必须放置一个名为errorxxx.html.twig的文件(xx是错误代码)。但是,它不是这样的。任何想法 ??? (https://symfony.com/doc/current/controller/error_pages.html) –

5
+0

我读过他们,做他们说什么,但我坚持与开发env和我不知道,如果它的工作以及如何看到结果。 – Faery

+2

在prod env中尝试一下,错误显示在dev中(以帮助你),所以它不起作用。 – Snroki

+4

如果答案的元素也在StackOverflow中,而不是可能会更改或移动的外部链接,那么您的答案会更好。 – AsTeR

14

犹未晚..

你可能知道的模板覆盖。 你可以覆盖你想要的任何模板。 所以,如果你想覆盖dev的错误页面,只是为了调试,那么你应该重写模板:

app/Resources/TwigBundle/views/Exception 

exception_full.html.twig 

您可以通过创建该文件夹中的这样的文件这样做现在您将看到您的自定义404在开发模式。

+1

我必须清除缓存(SF2.1)才能看到重写的模板。找到最好的workarround了。 –

+0

如果我把一个名为exception_full.html.twig的文件放在这个目录中就可以正常工作。但。所有的错误模板将被它覆盖。但是,我需要为每个错误代码使用不同的模板... sfy文档说我必须放置一个名为errorxxx.html.twig的文件(xx是错误代码)。但是,它不是这样的。任何想法 ??? (https://symfony.com/doc/current/controller/error_pages.html) –

7

你可以用下面的方式访问您检测到的文本:

{{ exception.message }} 
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

相关问题