How do I get the entity that represents the current user in Symfony2?

Robert Martin picture Robert Martin · Oct 6, 2011 · Viewed 158.6k times · Source

I am using the Symfony security setup. Everything works fine, but I don't know how to do one important thing:

In twig, I can reach the current user's info by doing:

Welcome, {{ app.user.username }}

or similar

How do I access this same information in the Controller? Specifically, I want to get the current user entity so I can store it relationally in another entity (one-to-one mapping).

I was really hoping it'd be

$this->get('security.context')->getToken()->getUser()

but that doesn't work. It gives me a class of type

Symfony\Component\Security\Core\User\User

and I want one of type

Acme\AuctionBundle\Entity\User

which is my entity....

Answer

Cristian Douce picture Cristian Douce · Oct 7, 2011

Symfony 4+, 2019+ Approach

In symfony 4 (probably 3.3 also, but only real-tested in 4) you can inject the Security service via auto-wiring in the controller like this:

<?php

use Symfony\Component\Security\Core\Security;

class SomeClass
{
    /**
     * @var Security
     */
    private $security;

    public function __construct(Security $security)
    {
       $this->security = $security;
    }

    public function privatePage() : Response
    {
        $user = $this->security->getUser(); // null or UserInterface, if logged in
        // ... do whatever you want with $user
    }
}

Symfony 2- Approach

As @ktolis says, you first have to configure your /app/config/security.yml.

Then with

$user = $this->get('security.token_storage')->getToken()->getUser();
$user->getUsername();

should be enougth!

$user is your User Object! You don't need to query it again.

Find out the way to set up your providers in security.yml from Sf2 Documentation and try again.

Best luck!