Symfony2 :SonataAdminBundle - Comment puis-je obtenir l'objet représentant l'utilisateur actuel dans une classe d'administrateur ?

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

Question

J'utilise le bundle sonata-admin.J'ai la relation avec l'utilisateur (FOSUserBundle) dans PageEntity.Je souhaite enregistrer l'utilisateur actuel qui crée ou modifie une page.

Je suppose que j'obtiens l'objet utilisateur dans les méthodes postUpdate et postPersist de la classe admin et que cet objet est transmis dans la méthode setUser.

Mais comment s’en rendre compte ?

Sur le groupe Google, j'ai vu

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

mais ça ne marche pas

Était-ce utile?

La solution

Dans la classe d'administration, vous pouvez obtenir l'utilisateur actuel connecté comme celui-ci:

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

Modifier en fonction des commentaires

Et vous le faites cela?Parce que cela devrait fonctionner.

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

Autres conseils

À partir de Symfony 2.8, vous devez utiliser security.token_storage au lieu de security.context pour récupérer l'utilisateur.Utilisez l'injection de constructeur pour l'obtenir dans votre administrateur :

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

admin.yml :

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

puis utilise $this->tokenStorage->getToken()->getUser() pour obtenir l'utilisateur actuel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top