2012-09-28 75 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

相關問題