Ich verwende das Symfony-Sicherheits-Setup. Alles funktioniert gut, aber ich weiß nicht, wie ich eine wichtige Sache machen soll:
Im Zweig kann ich die Informationen des aktuellen Benutzers erreichen, indem ich Folgendes mache:
Welcome, {{ app.user.username }}
o.ä
Wie greife ich im Controller auf dieselben Informationen zu? Insbesondere möchte ich die aktuelle Benutzerentität abrufen, damit ich sie relational in einer anderen Entität speichern kann (Eins-zu-Eins-Zuordnung).
Ich hatte wirklich gehofft, dass es so sein würde
$this->get('security.context')->getToken()->getUser()
aber das funktioniert nicht. Es gibt mir eine Klasse von Typ
Symfony\Component\Security\Core\User\User
und ich möchte einen Typ
Acme\AuctionBundle\Entity\User
Welches ist meine Entität ....
entity-framework
security
symfony
Robert Martin
quelle
quelle
Antworten:
Symfony 4+, 2019+ Ansatz
In Symfony 4 (wahrscheinlich auch 3.3, aber nur in 4 getestet) können Sie den
Security
Dienst über die automatische Verkabelung in den Controller wie folgt einspeisen :Symfony 2- Ansatz
Wie @ktolis sagt, müssen Sie zuerst Ihre konfigurieren
/app/config/security.yml
.Dann mit
sollte genug sein!
$user
ist dein Benutzerobjekt! Sie müssen es nicht erneut abfragen.Finden Sie in
security.yml
der Sf2-Dokumentation heraus, wie Sie Ihre Provider einrichten können, und versuchen Sie es erneut.Bestes Glück!
quelle
$user = $this->security->getUser();
,$user
ist immernull
für mich, ob angemeldet oder nicht.Beste Übung
Verwenden Sie laut Dokumentation seit Symfony 2.1 einfach diese Verknüpfung:
Das Obige funktioniert noch unter Symfony 3.2 und ist eine Abkürzung dafür:
Beispiel : Und wenn Sie direkt den Benutzernamen wollen:
Wenn falscher Benutzerklassentyp
Der Benutzer ist ein Objekt und die Klasse dieses Objekts hängt von Ihrem Benutzeranbieter ab .
quelle
Der Thread ist ein bisschen alt, aber ich denke, das könnte wahrscheinlich jemandem Zeit sparen ...
Ich bin auf dasselbe Problem gestoßen wie bei der ursprünglichen Frage, dass der Typ als Symfony \ Component \ Security \ Core \ User \ User angezeigt wird
Es stellte sich schließlich heraus, dass ich mit einem In-Memory-Benutzer angemeldet war
Meine security.yml sieht ungefähr so aus
Der Benutzertyp in_memory lautet immer Symfony \ Component \ Security \ Core \ User \ User. Wenn Sie Ihre eigene Entität verwenden möchten, melden Sie sich mit dem Benutzer dieses Anbieters an.
Danke, hj
quelle
In symfony> = 3.2 heißt es in der Dokumentation :
Blogpost darüber
quelle
quelle
Nun, zuerst müssen Sie den Benutzernamen des Benutzers aus der Sitzung in Ihrer Controller-Aktion wie folgt anfordern:
Führen Sie dann eine Abfrage an die Datenbank durch und holen Sie sich Ihr Objekt mit regulärem dql like
Der $ user sollte nun den Benutzer mit diesem Benutzernamen halten (Sie können natürlich auch andere Felder verwenden).
... aber Sie müssen zuerst Ihre /app/config/security.yml-Konfiguration konfigurieren, um das entsprechende Feld für Ihren Sicherheitsanbieter wie folgt zu verwenden:
hoffe das hilft!
quelle
$this->get('security.context')->getToken()->getUser()
selbst erhältst du das angemeldete Benutzerobjekt. Sie müssen es nicht erneut abfragen. Welche Version haben Sie tatsächlich verwendet?