/** * Create list of available API modules * * @return array */ public function createApiList() { $apigilityModules = []; $q = preg_quote('\\'); foreach ($this->moduleManager->getModules() as $moduleName) { $module = $this->moduleManager->getModule($moduleName); if ($module instanceof ApigilityProviderInterface) { $versionRegex = '#' . preg_quote($moduleName) . $q . 'V(?P<version>[^' . $q . ']+)' . $q . '#'; $versions = []; $serviceConfigs = []; if ($this->config['zf-rest']) { $serviceConfigs = array_merge($serviceConfigs, $this->config['zf-rest']); } if ($this->config['zf-rpc']) { $serviceConfigs = array_merge($serviceConfigs, $this->config['zf-rpc']); } foreach ($serviceConfigs as $serviceName => $serviceConfig) { if (!preg_match($versionRegex, $serviceName, $matches)) { continue; } $version = $matches['version']; if (!in_array($version, $versions)) { $versions[] = $version; } } $apigilityModules[] = ['name' => $moduleName, 'versions' => $versions]; } } return $apigilityModules; }
public function testCanLoadMultipleModules() { $configListener = $this->defaultListeners->getConfigListener(); $moduleManager = new ModuleManager(array('BarModule', 'BazModule')); $moduleManager->getEventManager()->attachAggregate($this->defaultListeners); $moduleManager->loadModules(); $loadedModules = $moduleManager->getLoadedModules(); $this->assertInstanceOf('BarModule\\Module', $loadedModules['BarModule']); $this->assertInstanceOf('BazModule\\Module', $loadedModules['BazModule']); $this->assertInstanceOf('BarModule\\Module', $moduleManager->getModule('BarModule')); $this->assertInstanceOf('BazModule\\Module', $moduleManager->getModule('BazModule')); $this->assertNull($moduleManager->getModule('NotLoaded')); $config = $configListener->getMergedConfig(); $this->assertSame('foo', $config->bar); $this->assertSame('bar', $config->baz); }
/** * Get the public path to the assets for a given module. * * We assume assets are stored in the <module-root>/public/ directory. * If not, the module can implement the <code>getPublicPath()</code> * method that returns the actual public path. * * @param string $moduleName * @return bool|string * @throws RuntimeException */ protected function getPublicPath($moduleName) { $module = $this->modules->getModule($moduleName); if (!$module) { throw new RuntimeException("Module does not exist ({$moduleName})"); } if (method_exists($module, 'getPublicPath')) { $public = rtrim($module->getPublicPath(), '/'); } elseif (method_exists($module, 'getRootPath')) { $public = $module->getRootPath() . '/public'; } elseif (method_exists($module, 'getPath')) { $public = $module->getPath() . '/../../public'; } else { $ref = new ReflectionClass($module); $path = dirname($ref->getFileName()); $public = realpath($path . '/../../public'); } if (is_dir($public)) { return $public; } return false; }