sources = $sources; } /** * Retrieve aggregated configuration from all available sources. * * @param string $path * @return string|array */ public function get($path = '') { $this->sortSources(); $data = []; foreach ($this->sources as $sourceConfig) { /** @var ConfigSourceInterface $source */ $source = $sourceConfig['source']; $configData = $source->get($path); if (!is_array($configData)) { $data = $configData; } elseif (!empty($configData)) { $data = array_replace_recursive(is_array($data) ? $data : [], $configData); } } return $data; } /** * Sort sources * * @return void */ private function sortSources() { uasort($this->sources, function ($firstItem, $secondItem) { return $firstItem['sortOrder'] > $secondItem['sortOrder']; }); } }