/**
  * 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;
 }
Exemple #2
0
 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);
 }
Exemple #3
0
 /**
  * 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;
 }