Symfony2 用户未在 Twig 异常控制器中定义

Symfony2 User not defined in Twig Exception Controller

我使用自己的操作来处理 twig 中的异常。

# Twig Configuration
twig:
    exception_controller:  MyBundle:Default:showException

问题是,我实际上已通过我的应用程序的身份验证,但在这个特殊的控制器中,令牌为空。

有人知道解决这个问题吗,因为我在 twig 模板中使用了用户对象。

来自docs

设计自定义错误页面时的一个常见陷阱是在错误模板(或错误模板继承的任何父模板)中使用 is_granted() 函数。如果这样做,您将看到 Symfony 抛出的异常。

这个问题的原因是路由在安全之前完成。如果发生 404 错误,则不会加载安全层,因此 is_granted() 函数未定义。解决办法是在使用这个函数前加上如下检查:

{% if app.user and is_granted('...') %}
    {# ... #}
{% endif %}