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

Fra*_*nk6 4 security-context symfony twig

我完成了这篇文章的答案,但令牌属性为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>
Run Code Online (Sandbox Code Playgroud)

我的扩展名:

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

    public function __construct(SecurityContext $securityContext){
        $this->user = $securityContext->getToken()->getUser();
    }
Run Code Online (Sandbox Code Playgroud)

Fra*_*nk6 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();
    }
Run Code Online (Sandbox Code Playgroud)