2012-05-10 19 views
42

Estoy desarrollando una aplicación que usa Symfony2 y doctrina 2. Me gustaría saber cómo puedo obtener el ID del usuario actualmente conectado.Symfony2 ingresando al ID de usuario

+0

En los controladores symfony2.1, puede obtener al usuario llamando a $ this-> getUser(). Creo que es nuevo en esta versión de Symfony. – PMoubed

Respuesta

112

versiones actuales Symfony Symfony (4, Symfony> = 3,2)

Since Symfony >=3.2 simplemente pueden esperar una implementación UserInterface a inyectar a la acción del controlador directamente. A continuación, puede llamar getId() para recuperar el identificador del usuario:

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

Puede seguir utilizando el almacenamiento de token de seguridad al igual que en todas las versiones de Symfony desde 2.6. Por ejemplo, en el controlador:

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

Nota que el acceso directo Controller::getUser() mencionado en la siguiente parte de esta respuesta está en desuso en Symfony 3 y se separó en Symfony 4,0

heredados versiones Symfony

La forma más fácil de acceder al usuario solía ser ampliar el controlador base y usar el método abreviado getUser() (eliminado en Symfony 4):

$user = $this->getUser(); 

Desde Symfony 2.6 puede recuperar un usuario desde el almacenamiento de token de seguridad:

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

Antes de Symfony 2.6, el token se puede acceder desde el servicio de contexto de seguridad en su lugar:

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

Tenga en cuenta que el servicio de contexto de seguridad está en desuso en Symfony 2 y se eliminó en Symfony 3.0.

+2

Buena respuesta. ** Obtener otros campos del objeto de usuario ** como correo electrónico, nombre o género. Úselo así Para obtener el género, ** echo 'Género es:'. $ user-> getGender(); ** – webblover

+0

Obsoleto desde la versión 2.6, para ser eliminado en 3.0. ! – Zagloo

2

Usted puede obtener la variable con el código de abajo:

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

mala práctica, el nombre de la variable debe ser '$ userId' – GusDeCooL

13

En Symfony2, podemos conseguir este sencillo por este código:

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

Esto puede vestirse en el método:

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

    return $userId; 
} 

e inducción $ this-> getUserId()

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