Symfony2:SonataAdminBundle - Como posso obter o objeto que representa o usuário atual dentro de um administrador de classe?
-
23-12-2019 - |
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
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.