Symfony2:如何在模拟用户帐户时显示管理员帐户名?

iol*_*leo 5 symfony twig

我想要显示类似的东西:

案例1:"以USER身份登录"

@ UserName [logout]

这里没问题,我只是这样做:

@ {{app.user.username}} [<a href="{{path("logout")}}">退出</a>]

案例2:"以ADMIN身份登录"

@ AdminName [logout]

同样适用于此:

@ {{app.user.username}} [<a href="{{path("logout")}}">退出</a>]

案例3:"以ADMIN模拟用户身份登录"

AdminName @ UserName [返回]

现在这是一个问题:

{{ ?? ..这里有什么.. ?? } {{app.user.username}} [<a href="{{(app.request.getRequestUri~'?_switch_user=_exit')}}">返回</a>]

这是我所知道的唯一解决方案......似乎有很多代码用于显示用户名的sipmle:/

{# iterating through user roles to find ROLE_PREVIOUS_ADMIN #}
{% for role in app.security.token.roles %}
  {% if role.source is defined %}
    {{ role.source.user.username }}
 {% endif %}
{% endfor %}
@ {{ app.user.username }} [ <a href="{{ (app.request.getRequestUri ~ '?_switch_user=_exit') }}">return</a> ]
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?我需要一个纯TWIG解决方案 - >这应该是我的主要模板模板的一部分(由所有其他模板扩展) - >我不能将控制器代码添加到所有操作,只是为了显示用户名.

Mat*_*att 4

根据您上面提出的想法,..您是否可以不只是创建一个自定义的树枝扩展来包含您的树枝模板中的逻辑,以便您可以myCustomTwigFunction在您的树枝模板中调用并且它将输出原始用户名?

有关自定义树枝扩展的更多信息,请参阅http://symfony.com/doc/current/cookbook/templatating/twig_extension.html

您的 Twig 扩展文件中的代码将是......

$roles = $this->container->get('security.context')->getToken()->getRoles();
foreach ($roles as $role) {
    if (method_exists($role, 'getSource')) {
        return ($role->getSource()->getUser()->getUsername());
    }
}
Run Code Online (Sandbox Code Playgroud)

其中 $container 是 twig 扩展类上 DI 容器的类变量