Symfony2:Comment obtenir de l'utilisateur de l'Objet à l'intérieur du contrôleur lors de l'utilisation de FOSUserBundle?

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

  •  11-12-2019
  •  | 
  •  

Question

J'utilise FOSUserBundle pour authentifier mes utilisateurs.

Je vais essayer d'obtenir l'objet de l'utilisateur à l'intérieur du Contrôleur pour inscrire un voyage où je me dois d'ajouter l'utilisateur de l'objet de ce Voyage avant de les enregistrer.

Je n'ai pas trouvé comment le faire parce que suivant la méthode où je l'ai trouvé dans la doc de symfony:

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

rend le nom d'utilisateur de la chaîne, mais j'ai besoin de l'ensemble de l'objet.

Actuellement, j'utilise cette méthode, mais il ne fonctionne pas correctement.

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

Comment puis-je faire correctement ce?

Était-ce utile?

La solution

Je pense Ramon a raison.Vous avez déjà l'objet utilisateur.

aussi dans Symfony> 2.1.x Vous pouvez utiliser

$this->getUser();

à l'intérieur du contrôleur.

Autres conseils

La documentation de l' getUser méthode indique:

renvoie un objet qui implémente __toString(), ou une primitive de la chaîne est renvoyée.

Et si nous regardons dans la FOS\UserBundle\Model\User classe, plus de ici (la base de la classe d'utilisateur utilisé par le FOSUserBundle), nous pouvons voir que c'est en effet un __toString méthode:

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

Je pense que vous avez réellement obtenir la User objet, mais parce qu'il met en œuvre une __toString méthode il peut être rendu directement dans les templates.

Dans Twig, vous pouvez utiliser:

{{ dump(user) }}

Pour voir quel type d'objet que vous avez.Mais Vous êtes en fait en utilisant un objet, pas une chaîne de caractères.

solution:

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

Dans FOSUser 1.3 vous ne pouvez pas appeler directement $this->getUser dans SecurityController.

Vous devez appeler $this->container->get('security.context')->getToken()->getUser();

Et c'est suffisant pour accéder à l'objet utilisateur.Pas besoin d'appeler $user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

En outre, votre find la méthode automatiquement et implicitement jeté votre initiale de nom d'utilisateur de l'objet à chaîne, car il n'attend pas un objet comme argument.

J'ai eu le même problème, de résoudre ce problème, ajoutez les classes FOS dans votre section d'utilisation I.E:

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

Pour Fosuser ^ 1.3 Vous pouvez obtenir l'utilisateur actuel de l'intérieur d'un contrôleur qui étend le basocontroller comme celui-ci:

$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');
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top