【发布时间】:2020-03-20 03:34:19
【问题描述】:
我试图通过CompilerPass 注入security.token_storage 服务,我没有错误并且用户当前已登录,但是当我访问TokenStorage 时,$tokenStorage->getToken() 我得到了一个空响应。
我检查了这些链接以供参考,但我无法获得有效的令牌。
How to inject shared service from compiler pass in Symfony 和 Access currently logged in user in UserRepository in Sylius
你知道为什么它返回空响应吗?
- Sylius 版本:1.4 和 Symfony 4.4
捆绑类:
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new ModifyRepositoryPass());
}
修改RepositoryPass 类:
class ModifyRepositoryPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
$container
->getDefinition('sylius.repository.order')
->addMethodCall('getTokenStorage', array(
new Reference('security.token_storage')
));
}
}
获取令牌:
class OrderRepository extends BaseOrderRepository
{
/** @var TokenStorageInterface */
protected $tokenStorage;
public function getTokenStorage(TokenStorageInterface $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function createListFilter()
{
$token = $this->tokenStorage->getToken()); // NULL token
}
Config.yml
sylius_order:
resources:
order:
classes:
repository: AppBundle\Repository\OrderRepository
#method: getTokenStorage also, I tried inject expression, but it does not work
#arguments: ["tokenStorage", "expr:service('security.token_storage').getToken()"]
【问题讨论】:
-
用户退出时返回Null,你确定吗?您是否使用 Symfony Profiler Security 选项卡检查了这些请求?
-
用户已登录,实际上,如果我从控制器检索令牌,我会得到一个有效的令牌,但是当我尝试使用 compilerPass 时它为空。