readConfig($configPath . '/config.php'); $autoloadConfig = $this->readPaths([$configPath . '/autoload']); $merged = array_merge_recursive(ProviderConfig::load(), $config, ...$autoloadConfig); return new Config($merged); } private function readConfig(string $configPath): array { $config = []; if (file_exists($configPath) && is_readable($configPath)) { $config = require $configPath; } return is_array($config) ? $config : []; } private function readPaths(array $paths): array { $configs = []; $finder = new Finder(); $finder->files()->in($paths)->name('*.php'); foreach ($finder as $file) { $config = []; $key = implode('.', array_filter([ str_replace('/', '.', $file->getRelativePath()), $file->getBasename('.php'), ])); Arr::set($config, $key, require $file->getRealPath()); $configs[] = $config; } return $configs; } }