Symfony2:SonataAdminBundle - ¿Cómo puedo obtener el objeto que representa la corriente de usuario dentro de un admin de la clase?
-
23-12-2019 - |
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
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.