I'm using FOSUserBundle to authenticate my users.
I'm trying to get the user object inside the Controller to register a trip where I should add the user object to this Trip before save.
I did not found how to do that because next method where I found it in symfony doc:
$user = $this->container->get('security.context')->getToken()->getUser();
renders the username as string, but I need the whole object.
Currently, I use this method, but it's not working properly.
$username = $this->container->get('security.context')->getToken()->getUser();
$em = $this->container->get('doctrine')->getEntityManager();
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);
How can I correctly do this?
The documentation for the
getUser
method indicates:And if we look in the
FOS\UserBundle\Model\User
class over here (the base user class used by the FOSUserBundle) we can see that it does indeed have a__toString
method:I think that you actually get the
User
object but because it implements a__toString
method it can be rendered directly in templates.In Twig you can use:
To see what kind of object you have. But You are actually using an object, not a string.
Solution:
I think Ramon is right. You already have the user object.
Also in Symfony > 2.1.x you can use
inside the controller.
I had the same issue, to resolve it add the FOS classes in your use section i.e:
In FOSUser 1.3 you can't call directly
$this->getUser
in SecurityController.You have to call
$this->container->get('security.context')->getToken()->getUser();
And this is enough to access the user object. No need to call
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);
Furthermore your
find
method automatically and implicitly cast your initial $username object to string because it doesn't wait an object as argument.