ZF2 - 从View Controller触发MvcEvent :: EVENT_DISPATCH_ERROR

时间:2015-05-15 11:52:37

标签: php zend-framework2 zend-framework-mvc

我正在使用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 个答案:

答案 0 :(得分:1)

我认为问题在于您没有附加到应用程序的sharedEventManager。您还可以使用Controller自己的事件管理器来触发事件。

尝试这样的事情:

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