Конфигуратор службы Symfony: getToken с security.context имеет значение NULL

Я использую Symfony Service Configurator в своем проекте для настройки службы после ее создания ( Docs), в методе Configure мне нужно, чтобы текущий пользователь вошел в систему, поэтому я ввел контейнер и попытался получить токен из службы Security.context, но получил всегда NULL. Я пытался также внедрить только Security.context в мою конструкцию Configurator, но я получил тот же результат.

Любые идеи, пожалуйста

Благодарю.

класс MyConfigurator
{
    приватный $ контейнер;

    публичная функция __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }


    публичная функция configure()
    {
        $user = $this->container->get('security.context')->getToken();
        var_dump($ пользователю); // = NULL
    }
}

2 ответа

Решение

Я решаю проблему, получая UserId из сеанса и выбирая текущего пользователя из базы данных.

UserId предварительно установлен AuthenticationListener в моем проекте. Поэтому я изменяю свою конструкцию Configurator так, чтобы она была такой:

    / **
     * @param EntityManager $ em
     * @param Session $ session
     * /
    публичная функция __construct(EntityManager $em, Session $session)
    {
        $this->em = $em;
        $this->session = $session;
    }

Лучший способ должен быть:

use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;

class MyConfigurator
{
     private $tokenStorage;

     public function __construct(EntityManager $em, TokenStorage $tokenStorage)
     {
         $this->em = $em;
         $this->tokenStorage= $tokenStorage;
     }

     public function configure()
     {
         $user = $this->tokenStorage->getToken()->getUser();
     }

     ....
Другие вопросы по тегам