Symfony getting logged in user's id

SymfonyDoctrine OrmDql

Symfony Problem Overview


I am developing an application using Symfony2 and doctrine 2. I would like to know how can I get the currently logged in user's Id.

Symfony Solutions


Solution 1 - Symfony

Current Symfony versions (Symfony 4, Symfony >=3.2)

Since Symfony >=3.2 you can simply expect a UserInterface implementation to be injected to your controller action directly. You can then call getId() to retrieve user's identifier:

class DefaultController extends Controller
{
    // when the user is mandatory (e.g. behind a firewall)
    public function fooAction(UserInterface $user)
    {
        $userId = $user->getId(); 
    }

    // when the user is optional (e.g. can be anonymous)
    public function barAction(UserInterface $user = null) 
    {
        $userId = null !== $user ? $user->getId() : null;
    }
}

You can still use the security token storage as in all Symfony versions since 2.6. For example, in your controller:

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

Note that the Controller::getUser() shortcut mentioned in the next part of this answer is no longer encouraged.

Legacy Symfony versions

The easiest way to access the user used to be to extend the base controller, and use the shortcut getUser() method:

$user = $this->getUser();

Since Symfony 2.6 you can retrieve a user from the security token storage:

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

Before Symfony 2.6, the token was accessible from the security context service instead:

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

Note that the security context service is deprecated in Symfony 2 and was removed in Symfony 3.0.

Solution 2 - Symfony

In symfony2, we can get this simpler by this code:

$id = $this->getUser()->getId();

Solution 3 - Symfony

You can get the variable with the code below:

$userId = $this->get('security.context')->getToken()->getUser()->getId();

Solution 4 - Symfony

This can get dressed in the method:

/**
 * Get user id
 * @return integer $userId
 */
protected function getUserId()
{
    $user = $this->get('security.context')->getToken()->getUser();
    $userId = $user->getId();
    
    return $userId;
}

And induction $this->getUserId()

public function example()
{
    print_r($this->getUserId()); 
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHaritzView Question on Stackoverflow
Solution 1 - SymfonyJakub ZalasView Answer on Stackoverflow
Solution 2 - Symfony53iScottView Answer on Stackoverflow
Solution 3 - SymfonywebdeveloperView Answer on Stackoverflow
Solution 4 - SymfonywebskyView Answer on Stackoverflow