1

我在我的项目中使用 Symfony Service Configurator 在实例化(Docs)后配置服务,在 Configure 方法中我需要当前用户登录,所以我注入容器并尝试获取令牌表单 Security.context 服务但我得到了始终为 NULL。我还尝试在我的 Configurator 构造中只注入 Security.context 但我得到了相同的结果。

任何想法请

谢谢。

类 MyConfigurator
{
    私人$容器;

    公共函数 __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }


    公共功能配置()
    {
        $user = $this->container->get('security.context')->getToken();
        var_dump($user); // = 空
    }
}
4

2 回答 2

1

我通过从会话中获取 UserId 并从数据库中获取当前用户来解决问题。

UserId 之前由我的项目中的 AuthenticationListener 设置。所以我修改我的配置器构造是这样的:

    /**
     * @param EntityManager $em
     * @param 会话 $session
     */
    公共函数 __construct(EntityManager $em, 会话 $session)
    {
        $this->em = $em;
        $this->session = $session;
    }
于 2014-08-29T11:45:53.963 回答
0

更好的方法应该是:

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

     ....
于 2016-10-27T15:48:20.913 回答