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
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 %}
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