Я пытаюсь получить доступ к моему пользователю из службы в 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'
Пожалуйста, что я делаю неправильно?




вот ответ:
$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"]
вы можете ввести доктрину в служении. см. мой отредактированный ответ.
спасибо за предложение; имело бы смысл для меня, если бы мне нужно было получить доступ только к пользователю, но мне также нужна доктрина