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;
}