Symfony2:Wie bekomme ich ein Benutzerobjekt in den Controller, wenn ich FOSUserBundle verwende?

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

  •  11-12-2019
  •  | 
  •  

Frage

Ich verwende FOSUserBundle, um meine Benutzer zu authentifizieren.

Ich versuche, das Benutzerobjekt im Controller dazu zu bringen, eine Reise zu registrieren, bei der ich das Benutzerobjekt vor dem Speichern zu dieser Reise hinzufügen soll.

Ich habe nicht gefunden, wie das geht, weil ich die nächste Methode im Symfony-Dokument gefunden habe:

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

stellt den Benutzernamen als Zeichenfolge dar, aber ich benötige das gesamte Objekt.

Derzeit verwende ich diese Methode, aber sie funktioniert nicht richtig.

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

Wie kann ich das richtig machen?

War es hilfreich?

Lösung

Ich denke, Ramon ist richtig.Sie haben bereits das Benutzerobjekt.

auch in symfony> 2.1.x können Sie verwenden generasacodicetagpre.

Innerhalb des Controllers.

Andere Tipps

Die Dokumentation für die getUser Methode zeigt an:

Entweder wird ein Objekt zurückgegeben, das __toString() implementiert, oder es wird ein primitiver String zurückgegeben.

Und wenn wir in die schauen FOS\UserBundle\Model\User Unterricht zuende Hier (die vom FOSUserBundle verwendete Basisbenutzerklasse) können wir sehen, dass es tatsächlich eine gibt __toString Methode:

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

Ich denke, dass du das tatsächlich verstehst User Objekt, sondern weil es ein implementiert __toString Methode kann es direkt in Vorlagen gerendert werden.

In Twig können Sie Folgendes verwenden:

{{ dump(user) }}

Um zu sehen, was für ein Objekt Sie haben.Aber Sie verwenden tatsächlich ein Objekt, keine Zeichenfolge.

Lösung: generasacodicetagpre.

In FOSUser 1.3 können Sie nicht direkt anrufen $this->getUser im SecurityController.

Du musst anrufen $this->container->get('security.context')->getToken()->getUser();

Und das reicht aus, um auf das Benutzerobjekt zuzugreifen.Sie müssen nicht anrufen $user = $em->getRepository('SiteUtilisateurBundle:Utilisateur')->find($username);

Darüber hinaus Ihr find Die Methode wandelt Ihr anfängliches $username-Objekt automatisch und implizit in einen String um, da sie nicht auf ein Objekt als Argument wartet.

Ich hatte dasselbe Problem, um es zu beheben, fügen Sie die FOS-Klassen in Ihrem Benutzernetz hinzu. I.E: generasacodicetagpre.

in symfony>= 3.2, Dokumentation sagt, dass:

Eine alternative Möglichkeit, den aktuellen Benutzer in einen Controller zu erhalten, ist zu Typ-TIPP Das Controller-Argument mit UserInterface (und standardmäßig zu null, wenn ein angemeldeter Anmeldung optional ist): generasacodicetagpre.

Dies wird nur für erfahrene Entwickler empfohlen, die sich nicht ausdehnen von der Symfony Base Controller und Don ' t Nutzen Sie den controllertrait entweder. Andernfalls wird empfohlen, den GetUser () weiterhin mithilfe des GetUsers () Verknüpfung.

Hier ist Blog post < / a> darüber

für fosuser ^ 1.3 Sie können den aktuellen Benutzer von innen einen Controller abrufen, der den BaseController so erweitert: generasacodicetagpre.

generasacodicetagpre.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top