我在项目中使用Symfony Service Configurator在实例化后配置服务(Docs), 在Configure方法中我需要记录当前用户,所以我注入了容器,我试图从Security.context服务获取令牌,但我总是为NULL。 我也尝试在Configurator构造中仅注入Security.context但是我得到了相同的结果。
任何想法请
感谢。
class MyConfigurator { private $container; public function __construct(ContainerInterface $container) { $this->container = $container; } public function configure() { $user = $this->container->get('security.context')->getToken(); var_dump($user); // = NULL } }
答案 0 :(得分:1)
我通过从会话中获取UserId并从数据库中获取当前用户来解决问题。
UserId先前由我的项目中的AuthenticationListener设置。 所以我修改我的Configurator结构是这样的:
/** * @param EntityManager $em * @param Session $session */ public function __construct(EntityManager $em, Session $session) { $this->em = $em; $this->session = $session; }
答案 1 :(得分: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();
}
....