2016-08-03 7 views
1

Ich versuche, die Benutzersitzung von einem Listener-Ereignis "onKernelRequest" abzurufen, aber der security.context existiert noch nicht und gibt jedesmal Null zurück.So erhalten Sie security.context bei onKernelRequest-Ereignis. Symfony2

Wie kann ich einen Request Listener erstellen, der nach dem Sicherheitskontext gelesen werden soll?

Vielen Dank.

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)), 

     ); 
    } 

} 

Antwort

2

ändern „onKernelRequest“ Hörer Priorität auf weniger als 8 (die Standardpriorität der Firewall).

Schauen Sie hier: https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml#L107

+0

Warum nicht hören Ereignis wie * kernel.controller * wenn security.context anstatt sich auf Priorität bereit sein sollte? – Rinat

+0

Außerdem sollten Sie den 'service_container' nicht in Ihre Dienste einfügen. In Ihrem Beispiel sollten Sie stattdessen den alten 'security.context' oder den neueren' security.token_storage' injizieren. Siehe zum Beispiel den Abschnitt "Vermeiden Sie, dass Ihr Code vom Container abhängt" von http://symfony.com/doc/current/components/dependency_injection.html. – Tsounabe

Verwandte Themen