Symfony2:¿Cómo conseguir que el objeto de usuario esté dentro del controlador cuando se utiliza FOSUserBundle?

StackOverflow https://stackoverflow.com//questions/12656388

  •  11-12-2019
  •  | 
  •  

Pregunta

Estoy usando FOSUserBundle para autenticar a mis usuarios.

Estoy intentando que el objeto de usuario dentro del Controlador registre un viaje donde debo agregar el objeto de usuario a este Viaje antes de guardar.

No encontré cómo hacerlo porque el siguiente método lo encontré en Symfony doc:

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

representa el nombre de usuario como una cadena, pero necesito el objeto completo.

Actualmente utilizo este método, pero no funciona correctamente.

$username = $this->container->get('security.context')->getToken()->getUser();
$em = $this->container->get('doctrine')->getEntityManager();
$user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

¿Cómo puedo hacer esto correctamente?

¿Fue útil?

Solución

Creo que Ramon tiene razón.Ya tienes el objeto de usuario.

también en Symfony> 2.1.x puede usar

$this->getUser();

dentro del controlador.

Otros consejos

La documentación para el getUser método indica:

Devuelve un objeto que implementa __toString() o se devuelve una cadena primitiva.

Y si miramos en el FOS\UserBundle\Model\User clase terminada aquí (la clase de usuario base utilizada por FOSUserBundle) podemos ver que efectivamente tiene una __toString método:

public function __toString()
{
    return (string) $this->getUsername();
}

Creo que realmente entiendes User objeto sino porque implementa un __toString método, se puede representar directamente en plantillas.

En Twig puedes usar:

{{ dump(user) }}

Para ver qué tipo de objeto tienes.Pero en realidad estás usando un objeto, no una cadena.

Solución:

$userManager = $this->container->get('fos_user.user_manager');
$user = $userManager->findUserByUsername($this->container->get('security.context')
                    ->getToken()
                    ->getUser())

En FOSUser 1.3 no puedes llamar directamente $this->getUser en Controlador de seguridad.

tienes que llamar $this->container->get('security.context')->getToken()->getUser();

Y esto es suficiente para acceder al objeto de usuario.No es necesario llamar $user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

Además tu find El método convierte automática e implícitamente su objeto $username inicial a una cadena porque no espera un objeto como argumento.

Tuve el mismo problema, para resolverlo Agregar las clases FOS en la sección de Uso I.E:

use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\GetResponseUserEvent;
use FOS\UserBundle\Model\UserInterface;

Para FOSUSER ^ 1.3 Puede obtener al usuario actual desde dentro de un controlador que extiende la base de control como este:

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

public function indexAction()
{
    /* @var $user \FOS\UserBundle\Model\UserInterface */
    if ($user = $this->getUser())
    {
        echo '<pre>';
        print_r($user);
        print_r($user->getRoles()); // method usage example

        exit;

        return $this->redirectToRoute('dashboard');
    }

    return $this->redirectToRoute('login');
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top