Twig Symfony:在404错误页面中获取登录用户
我试图在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
{#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();
}