/** * Merge a service configuration container * * Extracts the various service configuration arrays, and then merges with * the internal service configuration. * * @param ServiceConfiguration $config * @return void */ protected function mergeServiceConfiguration(ServiceConfiguration $config) { $serviceConfig = array( 'abstract_factories' => $config->getAbstractFactories(), 'aliases' => $config->getAliases(), 'factories' => $config->getFactories(), 'invokables' => $config->getInvokables(), 'services' => $config->getServices(), 'shared' => $config->getShared(), ); $this->serviceConfig = ArrayUtils::merge($this->serviceConfig, $serviceConfig); }
/** * 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; }