问题在于被覆盖的Twig 404模板。它通过在/ app/Resources/TwigBundle/views目录下创建error404.html.twig以默认方式被覆盖。
模板本身不包含任何不规则或复杂的逻辑:只是带有一些翻译文本(| trans)和带有多个链接的菜单的布局。
问题是,我无法在此模板中获取app.user对象(返回为NULL)或当前的app.request.locale(始终作为默认语言环境返回)。
我甚至试图覆盖树枝异常控制器并转储当前语言环境(Request :: getLocale())或获取用户 - 结果是相同的 - 默认的语言环境和用户的NULL。
然后我决定深入挖掘,发现了几十个听众(语言环境听众,例外情况,...),并试图在那里调试/修复/测试,但我没有进一步处理。
顺便说一句,我已经覆盖了500错误页面,并且一切都很好。那么我猜,当引发500错误(异常)时,symfony已经设置了用户/ locale/etc,因为它已经到达目标(控制器/动作),并且其他监听器已经执行。但是404错误(NotFoundHttpException)被抛出之前Symfony的目标是动作...
关于项目的一些话:symfony 2.4.8,doctrine,Gedmo扩展/ stof bundle,JMS i18n routing bundle。
Symfony的版本:v2.4.8 JMS的I18n路由包:1.1.1
感谢你的帮助。
问题已解决(尽可能)。解决方案由devilcius提出。 – Dmitry 2014-12-04 11:14:33