Symfony2:为什么在TwigExtension中注入SecurityContext时getToken返回null?

时间:2013-09-12 17:13:12

标签: symfony twig security-context

我完全从this post得到答案,但令牌属性为null,用户正确登录,路由位于防火墙后面。此外,我正在其他服务中注入SecurityContext,它工作正常。

services.xml:

<service id="tc.extensions.relation_helper"
 class="TC\CoreBundle\Extensions\RelationHelperExtension">
    <argument type="service" id="security.context" />
    <tag name="twig.extension" />
</service>

我的扩展名:

class RelationHelperExtension extends Twig_Extension
{
    /**
     * @var User 
     */
    private $user;

    public function __construct(SecurityContext $securityContext){
        $this->user = $securityContext->getToken()->getUser();
    }

2 个答案:

答案 0 :(得分:5)

正如@Elnur_Abdurrakhimov所说,我们必须首先缓存securityContext,并在需要时调用getToken()->getUser()

class RelationHelperExtension extends Twig_Extension
{
    private $context;

    public function __construct(SecurityContext $securityContext){
        $this->context= $securityContext;
    }

    private function getUser(){
            return $this->context->getToken()->getUser();
    }

答案 1 :(得分:3)

要了解此行为:

在SecurityContext init sequence =&gt;之前安装Twig_Extension;此时SecurityContext为空

但是如果你将它存储在一个属性中,当你使用你自己的枝条扩展服务时,你(在大多数情况下)在一个请求范围&amp; SecurityContext具有良好的价值:)