Я использую Restful Controller и при определенных условиях я хотел бы MvcEvent::EVENT_DISPATCH_ERROR
и немедленно прекратить выполнение контроллера. В моем Module
класс, я подключил прослушиватель событий для этого, но я не могу найти способ вызвать его из контроллера представления.
мой Module
код является:
public function onBootstrap(MvcEvent $mvcEvent) {
$eventManager = $mvcEvent->getApplication()
->getEventManager();
$eventManager->attach(array(MvcEvent::EVENT_DISPATCH_ERROR, MvcEvent::EVENT_RENDER_ERROR), array($this, 'error'));
}
public function error(MvcEvent $mvcEvent) {
echo $mvcEvent->getError();
die();
}
и мой код контроллера:
public function indexAction() {
$mvcEvent = $this->getEvent();
$mvcEvent->setError('test-error-code');
$mvcEvent->getTarget()->getEventManager()->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $mvcEvent);
return;
}
Я думаю, что проблема в том, что вы не присоединяетесь к приложению sharedEventManager
, Вы также можете использовать собственный диспетчер событий контроллера, чтобы вызвать событие.
Попробуйте что-то вроде этого:
module.php
public function onBootstrap(MvcEvent $mvcEvent) {
$eventManager = $mvcEvent->getApplication()->getEventManager()->getSharedManager();
$eventManager->attach('Zend\Stdlib\DispatchableInterface', MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'error'));
}
контроллер
public function indexAction() {
$mvcEvent = $this->getEvent();
$mvcEvent->setError('test-error-code');
$this->getEventManager()->trigger(MvcEvent::EVENT_DISPATCH_ERROR, $mvcEvent);
return;
}
Других решений пока нет …