Symfony2: SonataadminBundle - Come posso ottenere l'oggetto che rappresenta l'utente corrente all'interno di una classe di amministrazione?

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

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top