public function attachModuleEvents()
{
$di = $this->getDI();
$cachePrefix = $this->getAppName();
$cacheFile = $this->getConfigPath() . "/_cache.{$cachePrefix}.events.php";
$listeners = $this->readCache($cacheFile);
$cacheLoaded = false;
if (!$listeners) {
$moduleManager = $this->getDI()->getModuleManager();
$modules = $moduleManager->getModules();
$listeners = array();
foreach ($modules as $moduleName => $module) {
$moduleListeners = $moduleManager->getModuleListeners($moduleName);
if ($moduleListeners) {
$listeners[$moduleName] = $moduleListeners;
}
}
} else {
$cacheLoaded = true;
}
if (!is_array($listeners)) {
return $this;
}
$eventsManager = $this->getDI()->getEventsManager();
foreach ($listeners as $moduleName => $moduleListeners) {
if (!$moduleListeners) {
continue;
}
foreach ($moduleListeners as $eventType => $listener) {
$eventsManager->attach($eventType, new $listener());
}
}
if ($di->getConfig()->debug) {
$debugger = $this->getDebugger();
$debugger->debugVar($listeners, 'events');
}
if (!$di->getConfig()->debug && false === $cacheLoaded && $listeners) {
$this->writeCache($cacheFile, $listeners);
}
return $this;
}