web-dev-qa-db-fra.com

Symfony devient l'identifiant de l'utilisateur connecté

Je développe une application à l'aide de Symfony2 et de doctrine 2. Je voudrais savoir comment obtenir l'identifiant de l'utilisateur actuellement connecté. 

48
Haritz

Versions actuelles de Symfony (Symfony 4, Symfony> = 3.2)

Depuis Symfony> = 3.2 , vous pouvez simplement vous attendre à ce qu'une implémentation UserInterface soit directement injectée dans l'action de votre contrôleur. Vous pouvez ensuite appeler getId() pour récupérer l'identifiant de l'utilisateur: 

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

Vous pouvez toujours utiliser le stockage de jetons de sécurité comme dans toutes les versions de Symfony depuis la version 2.6. Par exemple, dans votre contrôleur:

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

Notez que le raccourci Controller::getUser() mentionné dans la partie suivante de cette réponse est obsolète dans Symfony 3 et a été supprimé dans Symfony 4.0}

Anciennes versions de Symfony

Le moyen le plus simple d'accéder à l'utilisateur était d'étendre le contrôleur de base et d'utiliser la méthode de raccourci getUser() (supprimée dans Symfony 4):

$user = $this->getUser();

Depuis Symfony 2.6, vous pouvez extraire un utilisateur du stockage de jetons de sécurité:

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

Avant Symfony 2.6, le jeton était accessible à partir du service de contexte de sécurité:

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

Notez que le service de contexte de sécurité est obsolète dans Symfony 2 et a été supprimé dans Symfony 3.0.

128
Jakub Zalas

Dans symfony2, ceci peut être simplifié par ce code:

$id = $this->getUser()->getId();
15
53iScott

Vous pouvez obtenir la variable avec le code ci-dessous:

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

Cela peut s'habiller dans la méthode:

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

    return $userId;
}

Et induction $ this-> getUserId ()

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