2012-05-03 17 views
5

quiero mostrar algo así:Symfony2: ¿Cómo mostrar el nombre de la cuenta de administrador al suplantar la cuenta de usuario?

Caso 1: "registra como usuario"

@username [cerrar]

No tuvimos problemas aquí, Acabo de hacer:

@ {{app.user.use rname}} [< a href = "{{ruta (" cerrar sesión ")}}" > de cierre de sesión </a >]

Caso 2: "conectado como ADMIN"

@ aDMINNAME [cerrar]

Las mismas obras aquí:

@ {{app.user.username}} [< a href = "{{ruta (" cerrar sesión ")}}" > de cierre de sesión </a >]

Caso 3: "conectado como ADMIN suplantación de un usuario"

aDMINNAME @username [volver]

Ahora que es un problema:

{{?? .. ¿qué aquí .. ??}} @ {{}} app.user.username [< a href = "{{(app.request.getRequestUri ~ '? _switch_user = _exit')}}" > retorno </a >]

Este es la única solución que conozco ... parece una gran cantidad de código para un sipmle mostrar nombre de usuario:/

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

¿hay alguna otra manera? Necesito una solución TWIG pura -> se supone que es parte de mi plantilla twig principal (que se extiende por todas las demás plantillas) -> No puedo agregar código de controlador a todas las acciones, solo para mostrar el nombre de usuario.

+0

¿Sabes cómo hacer esto en Symfony3? La variable app.security ha sido [obsoleta desde v2.6 y se eliminó en v3] (http://symfony.com/doc/2.8/reference/twig_reference.html#app). – user128216

Respuesta

4

Con la idea que ha propuesto anteriormente, ¿no puede simplemente crear una extensión de rama personalizada que abarque su lógica desde su plantilla de rama para que pueda simplemente llamar al myCustomTwigFunction dentro de su plantilla de ramas y generará el nombre del usuario original ?

Ver http://symfony.com/doc/current/cookbook/templating/twig_extension.html para obtener más información sobre las extensiones ramita personalizados

El código que le tiene en su archivo de extensión de la ramita sería ...

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

Donde $ contenedor es una variable de clase de la DI Contenedor en la clase de extensión de rama

+0

gracias que resuelve mi problema – loostro

Cuestiones relacionadas