symfony twig fosuserbundle

symfony - Acceder al usuario conectado en una plantilla



twig fosuserbundle (3)

Estoy usando FOSuserbundle para comenzar con el registro de usuario https://github.com/FriendsOfSymfony/FOSUserBundle

Lo tengo registrando / iniciando sesión y saliendo. 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 incluir un controlador en mi aplicación / Resources / views / base.html.twig es la mejor manera de hacerlo http://symfony.com/doc/current/book/templating.html#embedding-controllers

Así que escribí mi controlador para acceder a los datos del perfil del usuario. Lo que no puedo entender es cómo acceder a los métodos FOS en mi controlador integrado. Entonces desde mi Acme / UserBundle / Controller / 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)); }

de lo cual obtuve: vendor / bundles / FOS / UserBundle / Controller / ProfileController.php



Puede acceder a los datos del usuario directamente en la plantilla twig sin solicitar nada en el controlador. El usuario es accesible así: 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 la app.user es nulo.

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

Entonces, en cada una de sus páginas puede hacer:

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


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

Simplemente presente el nombre de usuario de inicio de sesión, por ejemplo, la función de filtro predeterminada ('''') debería ser agradable cuando el usuario NO inicia sesión, simplemente evite el molesto mensaje de error.