Symfony se connecte à l'identifiant de l'utilisateur
je développe une application utilisant Symfony2 et doctrine 2. Je voudrais savoir comment obtenir l'identifiant de l'utilisateur actuellement connecté.
4 réponses
Courant versions de Symfony (Symfony 4, Symfony >=3.2)
Depuis Symfony > = 3.2 vous pouvez simplement attendre un UserInterface
mise en place d'être injecté à votre contrôleur de l'action directement. Vous pouvez alors 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 du token de sécurité comme dans toutes les versions Symfony depuis 2.6. Par exemple, dans votre contrôleur:
$user = $this->get('security.token_storage')->getToken()->getUser();
Notez que Controller::getUser()
le raccourci mentionné dans la partie suivante de cette réponse est déprécié dans Symfony 3 et a été supprimé dans Symfony 4.0
Héritage versions de Symfony
la façon la plus simple d'accéder à l'utilisateur était d'étendre le contrôleur de base, et d'utiliser le raccourci getUser()
méthode (supprimé dans Symfony 4):
$user = $this->getUser();
Depuis Symfony 2.6 vous pouvez récupérer un utilisateur à partir du token de sécurité stockage:
$user = $this->get('security.token_storage')->getToken()->getUser();
Avant Symfony 2.6, le token était accessible depuis le service de contexte de sécurité à la place:
$user = $this->get('security.context')->getToken()->getUser();
Notez que le service de contexte de sécurité est déprécié dans Symfony 2 et a été supprimé dans Symfony 3.0.
Dans symfony2, nous pouvons obtenir ce plus simple 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 de 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 l'induction $this->getUserId()
public function example()
{
print_r($this->getUserId());
}