2

エラー テンプレートのカスタマイズに関する Symfony2.2 のドキュメントに従い、app/Resources/TwigBundle/views/Exception/error.html.twigTwig で説明されているように、デフォルトのエラー テンプレートをオーバーライドしました。

たとえば、一部のコントローラーでは、DB エンティティが存在しない場合にカスタム 404 をスローしています。私はそれをやっています:

throw $this->createNotFoundException('Thing not found');

カスタム テンプレートが存在する場合、この例外はキャッチされないため、エラー ページがレンダリングされず、致命的なエラーが発生します。例外ハンドラーに関しては何も変更していないので、テンプレートをオーバーライドすると Symfony のエラー レンダリング機能が壊れる理由がわかりません。

Twig 例外コントローラーが実行されているように見えますshowActionが、例外は依然としてスタックからスローされます。

例外がキャッチされてレンダリングされるようにするには、何をする必要がありますか?

追加情報:

以下が記録されます。(お客様のみ名義変更)

[2013-05-22 16:26:22] request.INFO: Matched route "show_thing" (parameters: "_controller": "Client\SiteBundle\Controller\ThingController::indexAction", "id": "thing", "_route": "show_thing") [] []
[2013-05-22 16:26:22] security.INFO: No expression found; abstaining from voting. [] []
[2013-05-22 16:26:22] request.ERROR: Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "thing not found" at /home/vhosts/client/symfony/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php line 149 [] []
4

2 に答える 2

0

あなたの問題は、symfony コントローラーのcreateNotFoundExceptionメソッドを参照しています。

Symfony API - Symfony/バンドル/フレームワークバンドル/コントローラー/コントローラー

GitHub のコード

カスタム エラー テンプレートを実際に表示するには、 prod環境で Symfony を使用している必要があります。例外はそこでしかキャッチされないからです。

開発環境では、symfony は独自の変更された php エラーハンドラーを使用してスタックトレースを表示します。これらの例外は、エラー ハンドラーによって表示されるだけではキャッチされません。

カーネル例外リスナーがサービス コンテナーに正しく登録されていることを確認しましたか?

app/console container:debug --show-private
于 2013-05-22T15:15:11.010 に答える