问题
I did exactly the answer from this post but the token property is null and the user is correctly logged in and the route is behind a firewall. Also, I am injecting the SecurityContext in other services and it works fine.
services.xml :
<service id="tc.extensions.relation_helper"
class="TC\CoreBundle\Extensions\RelationHelperExtension">
<argument type="service" id="security.context" />
<tag name="twig.extension" />
</service>
My extension:
class RelationHelperExtension extends Twig_Extension
{
/**
* @var User
*/
private $user;
public function __construct(SecurityContext $securityContext){
$this->user = $securityContext->getToken()->getUser();
}
回答1:
As @Elnur_Abdurrakhimov said we must cache the securityContext first and the call the getToken()->getUser()
when needed.
class RelationHelperExtension extends Twig_Extension
{
private $context;
public function __construct(SecurityContext $securityContext){
$this->context= $securityContext;
}
private function getUser(){
return $this->context->getToken()->getUser();
}
回答2:
To understand this behavior :
Twig_Extension are instancied BEFORE SecurityContext init sequence => at this moment SecurityContext is empty
But if you store it in a attribute, when you USE your own twig extension serviceyou are (in most of case) in a Request scope & SecurityContext is initalized with good values :)
来源:https://stackoverflow.com/questions/18770467/symfony2-why-gettoken-return-null-when-injecting-securitycontext-in-a-twigexte