/** * Adds single configuration item object to build config * * @param string $hook Hook ID * @param string $env Environment ID * @param string $section_name Configuraton section * @param ConfigItem $config_obj Configuraton item object * @return void */ protected function addConfigItem($hook, $env, $section_name, ConfigItem $config_obj) { // Getting the correct configuration id $id = $hook == 'presets' ? $config_obj->getId() : $config_obj->getUniqueId(); // Define path for config item $path = "{$hook}.{$env}.{$section_name}.{$id}"; // Check if we have a previous configuration $prev_config_obj = $this->config->get($path); // Merge new configuration with existing one if ($prev_config_obj) { $config_obj = $prev_config_obj->merge($config_obj); } // Add config item to its correct path $this->config->set($path, $config_obj); // Handle configuration item requirements if ($hook != 'presets' && ($requirements_config = $config_obj->getRequirements())) { $this->processHookEnvConfig($hook, $env, $requirements_config); } }
/** * Merges current configuration item with another one * * @param ConfigItemInterface $config_item Configuration object we're going to merge with * @return object Current class object */ public function merge(ConfigItem $config_item) { $current_config = $this->config->getAll(); $merging_config = $config_item->getAll(); $new_config = array_replace_recursive($current_config, $merging_config); $this->config->clear()->set($new_config); return $this; }