J'utilise la configuration de sécurité Symfony. Tout fonctionne bien, mais je ne sais pas comment faire une chose importante:
Dans twig, je peux accéder aux informations de l'utilisateur actuel en faisant:
Welcome, {{ app.user.username }}
ou similaire
Comment accéder à ces mêmes informations dans le contrôleur? Plus précisément, je souhaite obtenir l'entité utilisateur actuelle afin de pouvoir la stocker de manière relationnelle dans une autre entité (mappage un-à-un).
J'espérais vraiment que ce serait
$this->get('security.context')->getToken()->getUser()
mais cela ne fonctionne pas. Ça me donne une classe de type
Symfony\Component\Security\Core\User\User
et j'en veux un de type
Acme\AuctionBundle\Entity\User
qui est mon entité ...
entity-framework
security
symfony
Robert Martin
la source
la source
Réponses:
Approche Symfony 4+, 2019+
Dans symfony 4 (probablement 3.3 également, mais seulement testé en 4), vous pouvez injecter le
Security
service via un câblage automatique dans le contrôleur comme ceci:Symfony 2- Approche
Comme le dit @ktolis, vous devez d'abord configurer votre
/app/config/security.yml
.Puis avec
devrait être suffisant!
$user
est votre objet utilisateur! Vous n'avez pas besoin de l'interroger à nouveau.Découvrez la façon de configurer vos fournisseurs dans
security.yml
de Sf2 Documentation et essayez à nouveau.Bonne chance!
la source
$user = $this->security->getUser();
,$user
c'est toujoursnull
pour moi, que vous soyez connecté ou non.Meilleur entrainement
Selon la documentation depuis Symfony 2.1, utilisez simplement ce raccourci:
Ce qui précède fonctionne toujours sur Symfony 3.2 et est un raccourci pour cela:
Exemple : Et si vous voulez directement le nom d'utilisateur:
Si le type de classe d'utilisateurs est incorrect
L'utilisateur sera un objet et la classe de cet objet dépendra de votre fournisseur d'utilisateur .
la source
Le fil est un peu vieux mais je pense que cela pourrait probablement faire gagner du temps à quelqu'un ...
J'ai rencontré le même problème que la question d'origine, à savoir que le type est affiché comme Symfony \ Component \ Security \ Core \ User \ User
Il s'est finalement avéré que j'étais connecté en utilisant un utilisateur en mémoire
mon security.yml ressemble à quelque chose comme ça
le type d'utilisateur in_memory est toujours Symfony \ Component \ Security \ Core \ User \ User si vous souhaitez utiliser votre propre entité, connectez-vous en utilisant l'utilisateur de ce fournisseur.
Merci, hj
la source
Dans symfony> = 3.2, la documentation indique que:
Article de blog à ce sujet
la source
la source
Eh bien, vous devez d'abord demander le nom d'utilisateur de l'utilisateur de la session dans l'action de votre contrôleur comme ceci:
puis faites une requête à la base de données et obtenez votre objet avec un dql normal comme
le $ user devrait maintenant contenir l'utilisateur avec ce nom d'utilisateur (vous pouvez également utiliser d'autres champs bien sûr)
... mais vous devrez d'abord configurer votre configuration /app/config/security.yml pour utiliser le champ approprié pour votre fournisseur de sécurité comme ceci:
J'espère que cela t'aides!
la source
$this->get('security.context')->getToken()->getUser()
lui-même vous obtient l'objet utilisateur connecté. Vous n'avez pas à le demander à nouveau. En fait, quelle version utilisiez-vous?