В моем модуле приложения у меня есть прослушиватель событий, он запускается на каждой странице. Взятые из module.php в модуле Application:Ajax вызов не вызывает Zend 2 Событие EVENT_DISPATCH
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$eventManager->attach(MvcEvent::EVENT_DISPATCH, array($this, 'authenticate'),1);
}
public function authenticate(){
//auth here. This works on every page load except an ajax call
}
Javascript:
var adminData={ ... }
return $.post("/admin/save",adminData); //Will not trigger EVENT_DISPATCH!
Я проверил, что триггеры событий при каждой загрузке страницы, кроме случаев, когда вызывается JavaScript (AJAX). Если я перейду к ссылке, которую js вызывает (/ admin/save), событие будет срабатывать. Почему событие не запускается при вызове с помощью javascript?
Успех! Так оно и было. Метод события вызывается перед кодом действия. Но теперь у меня другая ошибка, я пытаюсь использовать форвардный плагин и вижу: Для прямого плагина требуется контроллер, который реализует InjectApplicationEventInterface Это потому, что контроллер еще не создан? –
Хороший вопрос, я не использовал форвардный плагин, и я не уверен, можете ли вы использовать его вне контроллера. Может быть, лучше переадресовать на страницу входа в систему (похоже, это ваш прецедент) –
Как вы перенаправляетесь из модуля? Я попробовал: $ controller = $ e-> getTarget(); return $ controller-> redirect() -> toRoute ("login"); –