Symfony2:SonataAdminBundle - Como posso obter o objeto que representa o usuário atual dentro de um administrador de classe?

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

Pergunta

Eu uso o sonata-administrador de conjunto.Eu tenho a relação com o usuário (FOSUserBundle) no PageEntity.Eu quero salvar o atual usuário que criar ou alterar uma página.

Meu palpite é de obter o objeto de usuário no postUpdate e postPersist métodos de administração de classe e este objecto de transmissão em setUser método.

Mas como perceber isso?

No google do grupo vi

    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());
    }

mas isto não funciona

Foi útil?

Solução

No admin classe, você pode obter o actual utilizador com sessão iniciada como este:

$this->getConfigurationPool()->getContainer()->get('security.token_storage')->getToken()->getUser()

EDITAR com base em comentários

E você está fazendo isso?Porque isso deve funcionar.

 /**
     * {@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);
    }

Outras dicas

Começando com o symfony 2.8, você deve usar security.token_storage em vez de security.context para recuperar o usuário.Use o construtor de injeção para obtê-lo em seu admin:

public function __construct(
    $code,
    $class,
    $baseControllerName,
    TokenStorageInterface $tokenStorage
) {
    parent::__construct($code, $class, $baseControllerName);
    $this->tokenStorage = $tokenStorage;
}

admin.yml :

    arguments:
        - ~
        - Your\Entity
        - ~
        - '@security.token_storage'

em seguida, use $this->tokenStorage->getToken()->getUser() para obter o utilizador actual.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top