我已按照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 [] []
答案 0 :(得分:3)
我解决了。
我的模板有一个未在布局中定义的块。
未记录此错误,但足以破坏渲染,
感谢@nifr的所有帮助。
答案 1 :(得分:0)
您的问题是指symfony控制器中的 createNotFoundException 方法。
Symfony API - Symfony/Bundle/FrameworkBundle/Controller/Controller
要实际显示自定义错误模板,您必须在 prod 环境中使用Symfony,因为异常只会在那里被捕获。
在开发环境中,symfony使用自己修改的php错误处理程序来显示堆栈跟踪。错误处理程序没有捕获这些异常。
您是否检查过内核异常监听器是否已在服务容器中正确注册?
app/console container:debug --show-private