我有一个关于Zendframework 2,事件管理器和监听器的问题。
class ApiErrorListener extends AbstractListenerAggregate {
public function attach(EventManagerInterface $events)
{
$this->listeners[] = $events->attach(MvcEvent::EVENT_RENDER, __CLASS__ . '::onRender', 1000);
}
public static function onRender(MvcEvent $e)
{
if($e->getResponse()->isOk())
{
return;
}
$httpCode = $e->getResponse()->getStatusCode();
$sm = $e->getApplication()->getServiceManager();
$viewModel = $e->getResult();
$exception = $viewModel->getVariable('exception');
$model = new JsonModel(
array(
'errorCode' => !empty($exception) ? $exception->getCode() : $httpCode,
'errorMsg' => !empty($exception) ? $exception->getMessage() : NULL
)
);
$model->setTerminal(true);
$e->setResult($model);
$e->setViewModel($model);
$e->getResponse()->setStatusCode($httpCode);
}
}我认为ApiErrorListener应该是一个倾听者,或者说它是一个观察者。为什么它必须实现attach()函数?
Observer Design Pattern
在此链接中,您只能看到主题(broadcaster或detach listeners)。我想我弄糊涂了..。
任何人请帮帮忙。
提前谢谢。
发布于 2014-06-25 01:01:32
AbstractListenerAggregate提供了附加/分离一组具有相似范围和目的的事件的功能。
它更像是一个组织类,而不是功能。它提供了一种简单的方法来附加和分离事件。在事件分离的情况下,它提供了一种简单的方法来分离一组事件,而不需要任何复杂的逻辑来循环所有注册的事件并找到您正在寻找的事件。
您不必使用侦听器聚合,您当然可以在应用程序中的任何位置将事件附加到EventManager。然而,随着您的应用程序的增长,以及具有越来越多依赖项的事件越来越多,它可以为您的事件逻辑提供一些健全性(和可测试性)。
https://stackoverflow.com/questions/22170983
复制相似问题