2012-05-03 37 views
5

chcę wyświetlić coś takiego:Symfony2: Jak wyświetlić nazwę konta administratora podczas podszywania się pod konto użytkownika?

Przypadek 1: "zalogować się jako użytkownik"

@ nazwa_użytkownika [Wyloguj]

Bez problemów, Po prostu:

@ {{app.user.use rname}} [< sekcję "{{ścieżki (" wylogowania ")}}" > wylogowania </a >]

Przypadek 2: "rejestrowane jako Administrator"

@ nazwa_administratora [Wyloguj]

Te same prace tutaj:

@ {{app.user.username}} [< sekcję "{{ścieżki (" wylogowania ")}}" > wylogowania </a >]

Przypadek 3: „rejestrowane jako ADMIN podszywanie USER”

nazwa_administratora @ Nazwa użytkownika [powrotu]

Teraz to jest problem:

{{?? .. co tutaj .. ??}} @ {{app.user.username}} [< sekcję "{{(app.request.getRequestUri ~? _switch_user = _exit ')}}" > powrotu </a >]

ten jest jedynym rozwiązaniem wiem ... wydaje się dużo kodu dla sipmle wyświetlanie login/

{# 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> ] 

Czy jest jakiś inny sposób? Potrzebuję czystego rozwiązania TWIG -> to ma być częścią mojego głównego szablonu gałązki (który jest rozszerzony o wszystkie inne szablony) -> Nie mogę dodać kodu kontrolera do wszystkich akcji, tylko żeby wyświetlić nazwę użytkownika.

+0

Czy wiesz, jak to zrobić w Symfony3? Zmienna app.security została [przestarzała od wersji 2.6 i została usunięta w wersji 3] (http://symfony.com/doc/2.8/reference/twig_reference.html#app). – user128216

Odpowiedz

4

Z pomysłem, który zaproponowałeś powyżej, .. nie możesz po prostu utworzyć niestandardowego rozszerzenia z gałązkami, które obejmuje twoją logikę z szablonu twig, dzięki czemu możesz po prostu zadzwonić pod numer myCustomTwigFunction w szablonie twig, a wyświetli się nazwa oryginalnego użytkownika ?

http://symfony.com/doc/current/cookbook/templating/twig_extension.html Zobacz więcej informacji na temat niestandardowych rozszerzeń gałązka

Kod musiałbyś w pliku rozszerzenia Twig byłoby ...

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

Gdzie $ pojemnik jest klasą zmienną DI Kontener na Twojej rozszerzonej gałązce

+0

dzięki, że rozwiązuje mój problem – loostro

Powiązane problemy