Symfony 3.0.9 не может получить доступ к getUser() из моего сервиса

Я пытаюсь получить доступ к моему пользователю из службы в symfony 3.0.9 со следующим:

в моем сервисе.yaml:

seal_service:
  class: FrontBundle\Service\SealService
  public: true
  arguments:
    - "@service_container"

и мой сервис такой:

class SealService
{
   protected $container = null;

   public function __construct(ContainerInterface $container)
   {
       $this->container = $container;
   }

   public function getAvailableSeals($sn = null){

    $user = $this->container->get('fos_user.user_manager')->getUser();

     ...
   }

но я получаю следующую ошибку: Attempted to call an undefined method named "getUser"

Я тоже пробовал $this->container->get('fos_user.user_manager')

если я использую $this->container->get('fos_user.security.controller') я получаю Call to protected method Symfony\Bundle\FrameworkBundle\Controller\Controller::getUser() from context 'FrontBundle\Service\SealService'

Пожалуйста, что я делаю неправильно?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
0
205
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вот ответ:

$tokenStorage = $this->container->get('security.token_storage')->getToken();
$user = $tokenStorage->getUser();

Используйте следующее:

$this->container->get('security.token_storage')->getToken()->getUser();

В любом случае, избегайте внедрения всего контейнера, если вам нужен только контекст безопасности.

https://symfony.com/doc/current/security.html#b-fetching-the-user-from-a-service

Ответ принят как подходящий

Не вводите контейнер в сервис: вместо этого введите хранилище токенов.

seal_service:
  class: FrontBundle\Service\SealService
  public: true
  arguments:
    - ["@security.token_storage","@doctrine.orm.entity_manager"]

спасибо за предложение; имело бы смысл для меня, если бы мне нужно было получить доступ только к пользователю, но мне также нужна доктрина

Sam 08.05.2019 12:53

вы можете ввести доктрину в служении. см. мой отредактированный ответ.

Mitesh Vasava 08.05.2019 13:22

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