Используя Zend Framework, я хочу прикрепить событие к своему приложению / модулю, чтобы при каждом событии диспетчеризации эта функция вызывалась для каждого модуля. Это мой код:
Модуль класса
{
публичная функция getConfig ()
{
возврат включает 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.
}
}
По какой-то причине мой onDispatch никогда не вызывается, хотя экраны приложений загружены.
Не знаю, что мне не хватает. Насколько я знаю, мне нужно использовать диспетчер общих событий, чтобы быть действительным для всего приложения.
Помощь приветствуется.
Чтобы это (прослушивание событий MVC) работало, вам нужен не менеджер общих событий, а менеджер событий MVC. Измените свой код следующим образом, и он будет работать как положено:
$application = $event->getApplication();
$eventManager = $application->getEventManager();
// Register the event listener method onDispatch
$eventManager->attach(MvcEvent::EVENT_DISPATCH, [$this, 'onDispatch'], 100);
Читайте также в этот отличный пост в блоге для получения более подробной информации о том, когда использовать общий менеджер событий. Этот конкретный случай также объясняется в этом сообщении в блоге:
Особый случай событий MVC
Ранее я говорил, что мы должны использовать менеджер общих событий. Но есть один конкретный случай: менеджер событий, который мы получаем изonBootstrap
Метод — менеджер событий MVC. Это означает, что этот менеджер событий знает события, вызванные платформой. Это означает, что если вы хотите добавить слушателей к событиямZend\Mvc\MvcEvent
класс, вы можете сделать это без использования общего менеджера событий:
Других решений пока нет …