Symfony2:SonataAdminBundle - ¿Cómo puedo obtener el objeto que representa la corriente de usuario dentro de un admin de la clase?

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

Pregunta

Yo uso la sonata-admin paquete.Tengo la relación con el usuario (FOSUserBundle) en el PageEntity.Quiero salvar el usuario actual que crear o modificar una página.

Mi conjetura es obtener el objeto de usuario en postUpdate y postPersist métodos de la administración de la clase y este objeto transmitir en setUser método.

Pero, ¿cómo darse cuenta de esto?

En el google del 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());
    }

pero esto no funciona

¿Fue útil?

Solución

En la clase de administración, puede obtener el usuario de registro actualizado como este:

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

Editar basado en comentarios

¿Y lo estás haciendo esto?Porque esto debería 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);
    }

Otros consejos

Empezando con symfony 2.8, usted debe utilizar security.token_storage en lugar de security.context para recuperar el usuario.El uso de inyección de constructor para recibir en tu panel de administración:

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

admin.yml :

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

a continuación, utilice $this->tokenStorage->getToken()->getUser() para obtener el usuario actual.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top