我完全从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();
}
答案 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具有良好的价值:)