web-dev-qa-db-fra.com

Accéder à l'utilisateur connecté dans un modèle

J'utilise FOSuserbundle pour commencer l'enregistrement de l'utilisateur https://github.com/FriendsOfSymfony/FOSUserBundle

Je l'ai enregistré/connecté et déconnecté. Ce que je veux faire maintenant, c'est saisir les données des utilisateurs connectés et les présenter sur chaque page de mon site. Comme "Bonjour nom d'utilisateur" dans le type d'en-tête.

Il semble que l’intégration d’un contrôleur dans mon application/Ressources/vues/base.html.twig soit la meilleure façon de procéder http: //symfony.com/doc/current/book/templating.html#embedding-controllers

J'ai donc écrit à mon contrôleur pour accéder aux données du profil utilisateur. Ce que je ne peux pas comprendre, c'est comment accéder aux méthodes FOS dans mon contrôleur intégré. Donc de mon Acme/UserBundle/Controller/UserController.php je veux faire ceci:

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));
}

que j'ai attrapé de: vendeur/bundles/FOS/UserBundle/Controller/ProfileController.php

92
ed209

Vous pouvez accéder aux données utilisateur directement dans le modèle twig sans rien demander dans le contrôleur. L'utilisateur est accessible comme ceci: app.user.

Maintenant, vous pouvez accéder à toutes les propriétés de l'utilisateur. Par exemple, vous pouvez accéder au nom d'utilisateur de la manière suivante: app.user.username.

Attention, si l'utilisateur n'est pas connecté, le app.user Est nul.

Si vous voulez vérifier si l'utilisateur est connecté, vous pouvez utiliser la fonction is_granted twig. Par exemple, si vous voulez vérifier si l'utilisateur a ROLE_ADMIN, il vous suffit de faire is_granted("ROLE_ADMIN").

Donc, dans chacune de vos pages, vous pouvez faire:

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

Pour symfony 2.6 et supérieur, nous pouvons utiliser

{{ app.user.getFirstname() }}

as app.security variable globale pour le modèle Twig a été obsolète et être retiré de 3.0

plus d'informations:

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

et voir les variables globales dans

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

13
Hahn