Конфигуратор службы 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();
}
....