为什么在覆盖错误模板时没有捕获异常?

时间:2013-05-22 10:29:47

标签: symfony symfony-2.2

我已按照Symfony2.2 documentation on customising error templates跟踪了app/Resources/TwigBundle/views/Exception/error.html.twig的默认错误模板,如Twig所述。

在某些控制器中,当数据库实体不存在时,我会抛出自定义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 [] []

2 个答案:

答案 0 :(得分:3)

我解决了。

我的模板有一个未在布局中定义的块。

未记录此错误,但足以破坏渲染,

感谢@nifr的所有帮助。

答案 1 :(得分:0)

您的问题是指symfony控制器中的 createNotFoundException 方法。

Symfony API - Symfony/Bundle/FrameworkBundle/Controller/Controller

Code on GitHub

要实际显示自定义错误模板,您必须在 prod 环境中使用Symfony,因为异常只会在那里被捕获。

在开发环境中,symfony使用自己修改的php错误处理程序来显示堆栈跟踪。错误处理程序没有捕获这些异常。

您是否检查过内核异常监听器是否已在服务容器中正确注册?

app/console container:debug --show-private