Symfony2: SonataadminBundle - Come posso ottenere l'oggetto che rappresenta l'utente corrente all'interno di una classe di amministrazione?
-
23-12-2019 - |
Domanda
Io uso il pacchetto Sonata-Admin. Ho la relazione con l'utente (fosuserbundle) nella pagina pagina. Voglio salvare l'utente corrente che creano o modifica una pagina.
La mia ipotesi riceve l'oggetto utente nei metodi PostPdate e PostPersist della classe di amministrazione e questo oggetto trasmettono nel metodo Seconder.
Ma come rendersi conto di questo?
sul gruppo di Google ho visto
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());
}
.
Ma questo non funziona
Soluzione
Nella classe di amministrazione è possibile ottenere l'utente attuale effettuato come questo:
$this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser()
.
Modifica in base al feedback
E lo stai facendo?Perché questo dovrebbe funzionare.
/**
* {@inheritdoc}
*/
public function prePersist($object)
{
$user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser();
$object->setUser($user);
}
/**
* {@inheritdoc}
*/
public function preUpdate($object)
{
$user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser();
$object->setUser($user);
}
. Altri suggerimenti
A partire da Symfony 2.8, è necessario utilizzare security.token_storage
anziché security.context
per recuperare l'utente.Utilizzare l'iniezione del costruttore per ottenerlo nel tuo amministratore:
public function __construct(
$code,
$class,
$baseControllerName,
TokenStorageInterface $tokenStorage
) {
parent::__construct($code, $class, $baseControllerName);
$this->tokenStorage = $tokenStorage;
}
.
admin.yml
:
arguments:
- ~
- Your\Entity
- ~
- '@security.token_storage'
.
Quindi utilizzare $this->tokenStorage->getToken()->getUser()
per ottenere l'utente corrente.