93 votes

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

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

Je l'ai enregistrer / connexion et à la déconnexion. Ce que je veux faire maintenant, c'est prendre les utilisateurs connectés de données et de les présenter sur chaque page de mon site. Comme "Salut nom d'utilisateur" dans l'en-tête de type de chose.

Il semble que l'intégration d'un contrôleur dans mon app/Resources/views/base.html.twig est la meilleure façon de le faire http://symfony.com/doc/current/book/templating.html#embedding-controllers

J'ai donc écrit mon contrôleur d'accès de l'utilisateur des données de profil. Ce que je ne peux pas savoir comment accéder à FOS méthodes dans mon contrôleur embarqué. 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));
}

qui j'ai attrapé à partir de: vendor/bundles/FOS/UserBundle/Controller/ProfileController.php

227voto

egeloen Points 2708

Vous pouvez accéder aux données de l'utilisateur directement dans le template twig sans demander quoi que ce soit dans le contrôleur. L'utilisateur est accessible comme suit : app.user.

Maintenant, vous pouvez accéder à tous les biens de l'utilisateur. Par exemple, vous pouvez accéder à comme nom d'utilisateur : app.user.username.

Attention, si l'utilisateur n'est pas connecté, l' app.user a la valeur null.

Si vous voulez vérifier si l'utilisateur est connecté, vous pouvez utiliser l' is_granted twig fonction. Par exemple, si vous voulez vérifier si l'utilisateur a ROLE_ADMIN, vous avez juste à faire is_granted("ROLE_ADMIN").

Ainsi, dans chacune de vos pages, vous pouvez le faire :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X