2017-02-10 3 views
0

ich in meinem Modell ein Stück Code haben:ZF3 onRoute Ereignis-Listener

public function init(ModuleManager $manager) 
{ 
    // Get event manager. 
    $eventManager = $manager->getEventManager(); 
    $sharedEventManager = $eventManager->getSharedManager(); 
    // Register the event listener method. 
    $sharedEventManager->attach(__NAMESPACE__, MvcEvent::EVENT_DISPATCH, [$this, 'myFunc'], 100); 
} 

// Event listener method. 
public function myFunc(MvcEvent $event) 
{ 
    echo 'it works!'; 
    exit; 
} 

Der Hörer aufgerufen wird. Wenn ich den Ereignistyp zu MvcEvent :: EVENT_ROUTE ändere, wird der Listener nicht mehr aufgerufen. Wie man es löst?

Antwort

2

Also anscheinend Objekt Zend \ EventManager \ EventManager Methoden triggerListeners für Ereignis 'Versand' zweimal aufruft. Einmal mit Kennungen gesetzt, wie:

Array 
(
    [0] => Zend\Mvc\Application 
) 

und Zweite mit Kennungen gesetzt, wie:

Array 
(
    [0] => Zend\Mvc\Controller\AbstractController 
    [1] => Application\Controller\IndexController 
    [2] => Application 
    [3] => Zend\Stdlib\DispatchableInterface 
    [4] => Zend\EventManager\EventManagerAwareInterface 
    [5] => Zend\EventManager\EventsCapableInterface 
    [6] => Zend\Mvc\InjectApplicationEventInterface 
    [7] => Zend\Mvc\Controller\AbstractActionController 
) 

Weil meine Zuhörer für Application Identifier definiert werden sie während des 2. Aufrufs ausgeführt werden. Das Problem beginnt, wenn ein Anruf für das Ereignis "Route" erfolgt. Es scheint, wie es nur einmal genannt wird, nur für diesen Satz von Kennungen:

Array 
(
    [0] => Zend\Mvc\Application 
) 

Dann später werden die Route Zuhörer nicht ausgeführt, weil ihre Kennung nur ‚Anwendung‘ ist. Um es zu lösen, reicht es aus, sie mit Zend \ Mvc \ Application Identifier zu verbinden:

$sharedEventManager->attach('Zend\Mvc\Application', MvcEvent::EVENT_ROUTE, [$this, 'myFunc'], 100); 
Verwandte Themen