ZF2 - 从视图控制器触发 MvcEvent::EVENT_DISPATCH_ERROR
ZF2 - Trigger MvcEvent::EVENT_DISPATCH_ERROR from View Controller
我正在使用 Restful 控制器,在某些情况下,我希望触发 MvcEvent::EVENT_DISPATCH_ERROR
并在之后立即停止执行控制器。在我的 Module
class 中,我为此附加了一个事件侦听器,但我找不到从视图控制器触发它的方法。
我的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
。也可以使用Controller自带的EventManager来触发事件。
尝试这样的事情:
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;
}
我正在使用 Restful 控制器,在某些情况下,我希望触发 MvcEvent::EVENT_DISPATCH_ERROR
并在之后立即停止执行控制器。在我的 Module
class 中,我为此附加了一个事件侦听器,但我找不到从视图控制器触发它的方法。
我的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
。也可以使用Controller自带的EventManager来触发事件。
尝试这样的事情:
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;
}