2016-08-03 7 views
1

我想從偵聽器事件「onKernelRequest」中獲取用戶會話,但security.context不存在並且每次都返回null。如何在onKernelRequest事件中獲取security.context。 Symfony2

如何創建一個請求偵聽器以在安全上下文之後被讀取?

謝謝。

class CurrencyListener implements EventSubscriberInterface { 

    private $default_currency; 
    private $serviceContainer; 

    public function __construct($default_currency, $serviceContainer) { 
     $this->default_currency = strtoupper($default_currency); 
     $this->serviceContainer = $serviceContainer; 
    } 

    public function onKernelRequest(GetResponseEvent $event) { 
     $request = $event->getRequest(); 

     var_dump($this->serviceContainer->get('security.context')->getToken()); 
    } 

    public static function getSubscribedEvents() { 
     return array(
      KernelEvents::REQUEST => array(array('onKernelRequest', 15)), 

     ); 
    } 

} 

回答

2

將您的「onKernelRequest」偵聽器優先級更改爲小於8(防火牆的默認優先級)。

看吧:https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml#L107

+0

爲什麼不喜歡* kernel.controller聽事件*當security.context應該準備好,而不是依靠優先? – Rinat

+0

此外,您不應該在服務中注入'service_container'。在你的例子中,你應該改爲注入舊的'security.context'或更新的'security.token_storage'。請參閱http://symfony.com/doc/current/components/dependency_injection.html中的「避免您的代碼取決於容器」部分。 – Tsounabe

相關問題