2011-09-18 19 views
80

estoy usando FOSuserbundle para empezar con el registro del usuario https://github.com/FriendsOfSymfony/FOSUserBundleAcceso al usuario que ha entrado en una plantilla

Tengo que registrarse/entrar y salir. Lo que quiero hacer ahora es tomar los datos de los usuarios registrados y presentarlos en cada página de mi sitio. Me gusta "Hola, nombre de usuario" en el tipo de encabezado de cosa.

Parece que la incorporación de un controlador en mi app/Resources/views/base.html.twig es la mejor manera de hacer esto http://symfony.com/doc/current/book/templating.html#embedding-controllers

así que escribí mi controlador para acceder a los datos del perfil de usuario. Lo que no puedo entender es cómo acceder a los métodos FOS en mi controlador integrado. Así que desde mi Acme/UserBundle/Controlador/UserController.php quiero hacer esto:

public function showAction() 
{ 
    $user = $this->container->get('security.context')->getToken()->getUser(); 
    if (!is_object($user) || !$user instanceof UserInterface) { 
     throw new AccessDeniedException(
       'This user does not have access to this section.'); 
    } 

    return $this->container->get('templating') 
     ->renderResponse('FOSUserBundle:Profile:show.html.'.$this->container 
     ->getParameter('fos_user.template.engine'), array('user' => $user)); 
} 

la que me agarró de: vendedor/paquetes/FOS/UserBundle/Controlador/ProfileController.php

Respuesta

205

Puede acceder a los datos del usuario directamente en la plantilla twig sin solicitar nada en el controlador. El usuario es accesible de esa manera: app.user.

Ahora puede acceder a todas las propiedades del usuario. Por ejemplo, puede acceder al nombre de usuario así: app.user.username.

Advertencia, si el usuario no está conectado, el app.user es nulo.

Si desea comprobar si el usuario está conectado, puede utilizar la función de rama is_granted. Por ejemplo, si desea verificar si el usuario tiene ROLE_ADMIN, solo tiene que hacer is_granted("ROLE_ADMIN").

Así, en cada una de sus páginas que puede hacer:

{% if is_granted("ROLE") %} 
    Hi {{ app.user.username }} 
{% endif %} 
+7

gracias. De hecho, cambié "ROLE" para "IS_AUTHENTICATED_REMEMBERED" y funcionó muy bien. – ed209

+5

No estoy usando FOSuserbundle (a menos que ahora lo incluya) pero 'app.user.username' aún me funcionó. Puede ser útil para que alguien lo sepa. –

+0

Gracias! Esto debería ser mucho más claro en la documentación. –

12

Para Symfony 2.6 y anteriores podemos utilizar

{{ app.user.getFirstname() }} 

como app.security variable global para la plantilla de la ramita ha quedado en desuso y se eliminará de 3.0

más información:

http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

y ver las variables globales en

http://symfony.com/doc/current/reference/twig_reference.html

+4

llamada al método innecesario. Puede usar atributos dinámicos como este '{{app.user.firstname}}'. Creo que es más fácil de usar para el front-end. – kacper3w

+2

Aunque estoy de acuerdo con el comentario anterior acerca de que no es necesario, voy a votar esto porque demuestra que se pueden usar métodos personalizados si así lo desea – Simon

-1
{{ app.user.username|default('') }}

Sólo presentes nombre de usuario de inicio de sesión, por ejemplo, por defecto la función de filtro ('') debe ser agradable cuando el usuario no está de inicio de sesión solo evite el molesto mensaje de error.

+2

y ¿cómo resuelve el problema? Quizás necesites agregar una explicación –

Cuestiones relacionadas