2016-08-03 10 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(ファイアウォールのデフォルトの優先度)未満に変更します。

ここを見て:security.contextではなく、優先順位に頼るの準備ができているはず際https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml#L107

+0

はなぜ* * kernel.controllerのようなイベントを聞いていませんか? – Rinat

+0

さらに、あなたのサービスに 'service_container'を注入しないでください。あなたの例では、むしろ古い 'security.context'またはより最近の' security.token_storage'を注入するべきです。たとえば、「コードがコンテナに依存するのを避ける」セクション(http://symfony.com/doc/current/components/dependency_injection.html)を参照してください。 – Tsounabe

関連する問題