1

Mit dem Zend Framework möchte ich ein Ereignis an meine Anwendung/Modul anhängen, so dass diese Funktion bei jedem dispach Ereignis für jedes Modul aufgerufen wird. Dies ist mein Code:Zend Framework hängt benutzerdefiniertes Ereignis an den geteilten Ereignismanager an

Klasse Module { public function getConfig() { return enthalten DIR. '/../config/module.config.php'; }

public function onBootstrap(MvcEvent $event) 
{ 
    $application = $event->getApplication(); 
    $serviceManager = $application->getServiceManager(); 
    $sessionManager = $serviceManager->get(SessionManager::class); 

    // Get event manager. 
    $eventManager = $event->getApplication()->getEventManager(); 
    $sharedEventManager = $eventManager->getSharedManager(); 

    // Register the event listener method onDispatch 
    $sharedEventManager->attach(AbstractActionController::class, 
      MvcEvent::EVENT_DISPATCH, [$this, 'onDispatch'], 100); 
} 

public function onDispatch(MvcEvent $event) 
{ 
    // Will perform application wide ACL control based on controller, 
    // action and user data. 
} 

}

Aus irgendeinem Grunde ist mein onDispatch nie geladen werden, obwohl die Anwendungsbildschirm aufgerufen.

Weiß nicht, was ich vermisse. Soweit ich weiß, muss ich den freigegebenen Ereignismanager verwenden, um für die gesamte Anwendung gültig zu sein.

Hilfe geschätzt.

Antwort

1

Damit (um MVC-Ereignisse zu hören) funktioniert, benötigen Sie nicht den freigegebenen Ereignismanager, sondern den MVC-Ereignismanager. Ändern Sie Ihren Code wie folgt und es wird wie erwartet funktionieren:

$application = $event->getApplication(); 
$eventManager = $application->getEventManager(); 

// Register the event listener method onDispatch 
$eventManager->attach(MvcEvent::EVENT_DISPATCH, [$this, 'onDispatch'], 100); 

Lesen Sie auch in this great blog post für weitere Details über, wenn das gemeinsame Event-Manager zu verwenden. Dieser Fall ist auch in diesem Blog-Eintrag erklärt:

Der Sonderfall von MVC Ereignissen
ich vorhin gesagt, dass wir den gemeinsamen Event-Manager verwenden sollten. Aber es gibt einen speziellen Fall: Der Ereignismanager, den wir von der onBootstrap-Methode abrufen, ist der MVC-Ereignismanager. Dies bedeutet, dass dieser Event-Manager die vom Framework ausgelösten Ereignisse kennt. Das bedeutet, wenn Sie den Ereignissen der Klasse Zend\Mvc\MvcEvent Listener hinzufügen möchten, können Sie dies tun, ohne den freigegebenen Ereignismanager zu verwenden:

Verwandte Themen