Example #1
0
 /**
  * Configure the service manager
  *
  * Configures the service manager based on the internal, merged
  * service configuration.
  * 
  * @return void
  */
 public function configureServiceManager()
 {
     if ($this->configured) {
         // Don't configure twice
         return;
     }
     $serviceConfig = new ServiceConfiguration($this->serviceConfig);
     $serviceConfig->configureServiceManager($this->services);
     $this->configured = true;
 }
Example #2
0
 /**
  * Use merged configuration to configure service manager
  *
  * If the merged configuration has a non-empty, array 'service_manager'
  * key, it will be passed to a ServiceManager Configuration object, and
  * used to configure the service manager.
  *
  * @param  ModuleEvent $e
  * @return void
  */
 public function onLoadModulesPost(ModuleEvent $e)
 {
     $configListener = $e->getConfigListener();
     $config = $configListener->getMergedConfig(false);
     if ($this->defaultServiceConfiguration) {
         $defaultConfig = array('service_manager' => $this->defaultServiceConfiguration);
     }
     foreach ($this->serviceManagers as $key => $sm) {
         if (isset($defaultConfig[$sm['config_key']]) && is_array($defaultConfig[$sm['config_key']]) && !empty($defaultConfig[$sm['config_key']])) {
             $this->serviceManagers[$key]['configuration']['default_config'] = $defaultConfig[$sm['config_key']];
         }
         if (isset($config[$sm['config_key']]) && is_array($config[$sm['config_key']]) && !empty($config[$sm['config_key']])) {
             $this->serviceManagers[$key]['configuration']['merged_config'] = $config[$sm['config_key']];
         }
         // Merge all of the things!
         $smConfig = array();
         foreach ($this->serviceManagers[$key]['configuration'] as $configs) {
             if (isset($configs['configuration_classes'])) {
                 foreach ($configs['configuration_classes'] as $class) {
                     $configs = ArrayUtils::merge($configs, $this->serviceConfigurationToArray($class));
                 }
             }
             $smConfig = ArrayUtils::merge($smConfig, $configs);
         }
         if (!$sm['service_manager'] instanceof ServiceManager) {
             $instance = $this->defaultServiceManager->get($sm['service_manager']);
             if (!$instance instanceof ServiceManager) {
                 throw new Exception\RuntimeException(sprintf('Could not find a valid ServiceManager for %s', $sm['service_manager']));
             }
             $sm['service_manager'] = $instance;
         }
         $serviceConfig = new ServiceConfiguration($smConfig);
         $serviceConfig->configureServiceManager($sm['service_manager']);
     }
     $this->configured = true;
 }