6

私はそのようなものを表示したい:

ケース1:「ユーザーとしてログイン」

@UserName[ログアウト]

ここでは問題ありません、私はただします:

@ {{app.user.username}} [<ahref="{{path("logout")}}">ログアウト</a>]

ケース2:「ADMINとしてログイン」

@AdminName[ログアウト]

ここでも同じことが機能します。

@ {{app.user.username}} [<ahref="{{path("logout")}}">ログアウト</a>]

ケース3:「ユーザーになりすましている管理者としてログイン」

AdminName @ UserName [return]

今それは問題です:

{{ ??..ここで何..?? }} @ {{app.user.username}} [<a href="{{(app.request.getRequestUri〜'?_switch_user=_exit')}}"> return </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> ]

他に方法はありますか?純粋なTWIGソリューションが必要です->これはメインの小枝テンプレートの一部であると想定されています(他のすべてのテンプレートによって拡張されています)->ユーザー名を表示するためだけに、すべてのアクションにコントローラーコードを追加することはできません。

4

2 に答える 2

4

上記で提案したアイデアを使用して、Twigテンプレートからロジックを含むカスタムTwig拡張機能を作成して、TwigmyCustomTwigFunctionテンプレート内で呼び出すだけで、元のユーザー名が出力されるようにすることはできませんか?

カスタムTwig拡張機能の詳細については、http://symfony.com/doc/current/cookbook/templating/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());
    }
}

$ containerは、twig拡張クラスのDIコンテナーのクラス変数です。

于 2012-05-22T08:35:21.100 に答える
1

Symfony 4.3 / 4.4 / 5.0のソリューションをお探しの方へ:

{% if is_granted('ROLE_PREVIOUS_ADMIN') %}
    {% for role in app.token.roles %}
        {% if role.role == 'ROLE_PREVIOUS_ADMIN' %}
            Admin username is {{ role.source.user.username }}
        {% endif %}
    {% endfor %}
{% endif %}

Symfony 5.1以降ではIS_IMPERSONATOR、の代わりに使用してROLE_PREVIOUS_ADMINください。

于 2021-07-08T00:16:52.530 に答える