Symfony2: Come ottenere l'oggetto utente all'interno del controller quando si utilizza FosuserBundle?

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

  •  11-12-2019
  •  | 
  •  

Domanda

Sto usando fosuserbundle per autenticare i miei utenti.

Sto cercando di ottenere l'oggetto utente all'interno del controller per registrare un viaggio in cui dovrei aggiungere l'oggetto utente a questo viaggio prima di salvare.

Non ho trovato come farlo perché il prossimo metodo dove l'ho trovato in symfony doc:

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

rende il nome utente come stringa, ma ho bisogno dell'intero oggetto.

Attualmente, uso questo metodo, ma non funziona correttamente.

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

Come posso farlo correttamente?

È stato utile?

Soluzione

Penso che Ramon ha ragione.Hai già l'oggetto utente.

Anche in symfony> 2.1.x è possibile utilizzare

$this->getUser();
.

all'interno del controller.

Altri suggerimenti

La documentazione per il metodo getUser indica:

.

Restituisce un oggetto che implementa __ToString () o una stringa primitiva viene restituita.

E se guardiamo nella classe FOS\UserBundle\Model\User su qui (la classe di utenti di baseUtilizzato dal fosuserbundle) possiamo vedere che ha in effetti un metodo __toString:

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

Penso che tu abbia effettivamente ricevuto l'oggetto User ma perché implementa un metodo __toString può essere reso direttamente in modelli.

in ramoscello puoi usare:

{{ dump(user) }}
.

per vedere che tipo di oggetto hai.Ma stai effettivamente usando un oggetto, non una stringa.

Soluzione:

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

In Fosuser 1.3 Non è possibile chiamare direttamente $this->getUser in SecurityController.

Devi chiamare $this->container->get('security.context')->getToken()->getUser();

E questo è sufficiente per accedere all'oggetto utente. Non c'è bisogno di chiamare $user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

Inoltre il tuo metodo find automaticamente e ha implicitamente il tuo oggetto iniziale di username $ per stringa perché non attende un oggetto come argomento.

Ho avuto lo stesso problema, per risolverlo aggiungi le classi FOS nella sezione dell'uso I.e:

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

Per il fosuser ^ 1.3 È possibile ottenere l'utente corrente dall'interno di un controller che estende il basecontroller come questo:

$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');
}
.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top