Symfony2:SonataAdminBundle - Wie kann ich das Objekt, das den aktuellen Benutzer darstellt, in einer Admin-Klasse abrufen?
-
23-12-2019 - |
Frage
Ich benutze das Sonata-admin Bundle.Ich habe die Beziehung zum Benutzer (FOSUserBundle) in der Seitenentität.Ich möchte den aktuellen Benutzer speichern, der eine Seite erstellt oder ändert.
Ich vermute, dass das Benutzerobjekt in den Methoden postUpdate und postPersist der Admin-Klasse abgerufen und dieses Objekt in der Methode setUser übertragen wird.
Aber wie kann man das realisieren?
In der Google-Gruppe habe ich gesehen
public function setSecurityContext($securityContext) {
$this->securityContext = $securityContext;
}
public function getSecurityContext() {
return $this->securityContext;
}
public function prePersist($article) {
$user = $this->getSecurityContext()->getToken()->getUser();
$appunto->setOperatore($user->getUsername());
}
aber das funktioniert nicht
Lösung
In der Administratorklasse können Sie den aktuellen angemeldeten Benutzer so erhalten:
generasacodicetagpre.edit basierend auf dem Feedback
Und das macht es das?Weil dies funktionieren sollte.
generasacodicetagpre.Andere Tipps
Beginnend mit symfony 2.8 sollten Sie verwenden security.token_storage
statt security.context
um den Benutzer abzurufen.Verwenden Sie die Konstruktorinjektion, um sie in Ihren Administrator zu integrieren:
public function __construct(
$code,
$class,
$baseControllerName,
TokenStorageInterface $tokenStorage
) {
parent::__construct($code, $class, $baseControllerName);
$this->tokenStorage = $tokenStorage;
}
admin.yml
:
arguments:
- ~
- Your\Entity
- ~
- '@security.token_storage'
dann benutze $this->tokenStorage->getToken()->getUser()
um den aktuellen Benutzer zu erhalten.