ZF2 — Триггер MvcEvent :: EVENT_DISPATCH_ERROR из View Controller

Я использую 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;
}

1

Решение

Я думаю, что проблема в том, что вы не присоединяетесь к приложению 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;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]