web-dev-qa-db-ja.com

カスタマイズされた404エラーページを表示する方法-Symfony2

私は私のコントローラーにこれを持っています:

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

Dev envでテストすると、テキストで例外が検出されたことを示すSymfonyのページが表示されますが、prod envではテストできません:(これをphp app/console cache:clear --env=prod --no-debugで実行し、URLapp_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の値はどこに指定すればよいですか?それとも例外から取られていますか?

したがって、一般的に私がやりたいのは、コントローラーのアクションの条件が真の場合、カスタマイズされたエラーページをprodenvに表示することです。私はすでにそれを作りましたか、そうでなければ、それを作る方法とprod envで結果を見る方法は?

12
Faery

また、試してみたところ、app/Resources/TwigBundle/views/Exception /error.html.twigに配置されたカスタムエラーページが本番環境でのみ機能することに気付きました。

16
Chopchop

決して遅くなるよりはましだと思います。

テンプレートのオーバーライドについてはおそらくご存知でしょう。必要なテンプレートを上書きできます。したがって、デバッグのためだけに開発エラーページをオーバーライドする場合は、テンプレートをオーバーライドする必要があります。

exception_full.html.twig

このフォルダに次のようなファイルを作成することで、これを行うことができます。

app/Resources/TwigBundle/views/Exception

これで、カスタマイズされた404が開発モードで表示されます。

14
Jimmy Knoot

検出されたテキストには、次の方法でアクセスできます。

{{ exception.message }}
8
meteor
5
Upvote

Symfonyには、開発環境でエラーページテンプレートを表示できる新しい方法があるようです。彼らのドキュメントからの引用:

開発環境にいる間、Symfonyは光沢のある新しいカスタマイズされたエラーページの代わりに大きな例外ページを表示します。では、どのように見えるかを確認してデバッグするにはどうすればよいでしょうか。

幸い、デフォルトのExceptionControllerを使用すると、開発中にエラーページをプレビューできます。

この機能を使用するには、routing_dev.ymlファイルに次のような定義が必要です。

# app/config/routing_dev.yml
_errors:
    resource: "@TwigBundle/Resources/config/routing/errors.xml"
    prefix:   /_error

続きを読む: Symfonyエラーページマニュアル

3
Shane N