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é.
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.
Dans symfony2, ceci peut être simplifié par ce code:
$id = $this->getUser()->getId();
Vous pouvez obtenir la variable avec le code ci-dessous:
$userId = $this->get('security.context')->getToken()->getUser()->getId();
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());
}