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

Fil*_*ilo 2 symfony twig

我正在尝试在404错误页面中获取登录用户的用户名,如symfony文档所说;

{# app/Resources/TwigBundle/views/Exception/error404.html.twig #}
{% extends 'base.html.twig' %}

{% block body %}
    <h1>Page not found</h1>

    {# example security usage, see below #}
    {% if is_granted('IS_AUTHENTICATED_FULLY') %}
            IS_AUTHENTICATED_FULLY: {{ app.user.username }}
    {% endif %}

    {% if is_granted('IS_AUTHENTICATED_REMEMBERED') %}
            IS_AUTHENTICATED_REMEMBERED: {{ app.user.username }}
    {% endif %}

    {% if app.user %}
            app.user: {{ app.user.username }}
    {% endif %}

    <p>
        The requested page couldn't be located. Checkout for any URL
        misspelling or <a href="{{ path('homepage') }}">return to the homepage</a>.
    </p>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

一切都在开发人员中运行,但在生产中,始终不会记录用户。如果条件失败。

讨论中,我发现:

造成此问题的原因是在安全性之前完成了路由。如果发生404错误,则不会加载安全层,因此

那么...可以在树枝异常页面中获取登录用户吗?

更新资料

看起来这是理想的行为:https : //github.com/symfony/symfony/issues/8414#issuecomment-23661839

这种骇客可以“解决”,但确实很难看...

Fil*_*ilo 5

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

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

pageNotFound:
    pattern:  /{path}
    defaults: { _controller: MyContentBundle:PageNotFound:pageNotFound, path: '' }
    requirements:
        path: .*
Run Code Online (Sandbox Code Playgroud)

控制器动作

public function pageNotFoundAction()
    {
        throw new NotFoundHttpException();
    }
Run Code Online (Sandbox Code Playgroud)

参考

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