Twig Symfony:在404错误页面中获取登录用户

Twig Symfony:在404错误页面中获取登录用户,twig,symfony,Twig,Symfony,我试图在404错误页面中获取登录用户的用户名,如图所示 {#app/Resources/TwigBundle/views/Exception/error404.html.twig} {%extends'base.html.twig%} {%block body%} 找不到页面 {#安全使用示例,请参见下文#} {%if'is'u AUTHENTICATED'u FULLY')%} 是否已完全验证:{{app.user.username} {%endif%} {%if'is'u AUTHENTIC

我试图在404错误页面中获取登录用户的用户名,如图所示

{#app/Resources/TwigBundle/views/Exception/error404.html.twig}
{%extends'base.html.twig%}
{%block body%}
找不到页面
{#安全使用示例,请参见下文#}
{%if'is'u AUTHENTICATED'u FULLY')%}
是否已完全验证:{{app.user.username}
{%endif%}
{%if'is'u AUTHENTICATED'u membered')%}
是否已验证?是否记住:{{app.user.username}
{%endif%}
{%if-app.user%}
app.user:{{app.user.username}
{%endif%}

找不到请求的页面。签出任何URL
拼写错误或错误。

{%endblock%}
一切都在dev中工作,但在生产环境中,用户总是不会被记录。 每一个条件都失败了

在这本书中,我发现:

这个问题的原因是路由是在安全之前完成的。如果 发生404错误时,安全层未加载,因此

所以。。。可以让登录用户进入细枝异常页面吗

更新

看起来这是一种理想的行为:


这可以“解决”,但它真的很难看…

编辑:不幸的是,这适用于除404之外的所有错误页面,因此这不是正确的答案。仅将此作为参考

原始答案:这对我很有用:

{% if app.user %}
    {{ app.user.username }}
{% endif %}
被授予(“完全认证”)
只有在您登录此会话时才为真:

是完全被证实的,事实上你更强大。只有在您在此会话期间实际登录时,才能使用此功能。如果您是因为“记住我”cookie而登录的,则不会有此功能;


到目前为止,我找到的唯一解决方案是:

路由.yml (这必须是最后一条规则)

控制器动作


我希望找到一个更好的解决方案

是的,你说的“完全认证”是对的,我发布了这个示例,但它不适用于“完全认证”。无论如何您使用的是哪个版本的symfony?我有3.0分支,但它不工作。你是在prod还是dev?在开发中,它可以工作,prod Noa另一个问题:您是否尝试过使用“/dfdsusdhuasd”之类的随机url或在控制器中生成未找到的异常?测试2.8和3,似乎除了404之外,所有错误页面都加载了app.user。所以我不能说我对这方面有更多的经验,但你发现的黑客实际上似乎没有那么难看。特别是如果您按照建议将异常消息与原始消息相似。请告诉我们您是否找到了更好的方法,或者在使用symfony 3时使用了对我有效的hack:),即使用
path:/{path}
而不是
pattern:/{path}
{% if app.user %}
    {{ app.user.username }}
{% endif %}
pageNotFound:
    pattern:  /{path}
    defaults: { _controller: MyContentBundle:PageNotFound:pageNotFound, path: '' }
    requirements:
        path: .*
public function pageNotFoundAction()
    {
        throw new NotFoundHttpException();
    }