4 * This file is a part of dflydev/dot-access-configuration.
6 * (c) Dragonfly Development Inc.
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
12 namespace Dflydev\DotAccessConfiguration;
14 use Dflydev\DotAccessData\Util as DotAccessDataUtil;
15 use Symfony\Component\Yaml\Yaml;
17 class YamlFileConfigurationBuilder extends AbstractConfigurationBuilder
20 * YAML Configuration Filenames
24 private $yamlConfigurationFilenames;
29 * @param array $yamlConfigurationFilenames
31 public function __construct(array $yamlConfigurationFilenames)
33 $this->yamlConfigurationFilenames = $yamlConfigurationFilenames;
39 public function internalBuild(ConfigurationInterface $configuration)
43 foreach ($this->yamlConfigurationFilenames as $yamlConfigurationFilename) {
44 if (file_exists($yamlConfigurationFilename)) {
45 $config = DotAccessDataUtil::mergeAssocArray($config, Yaml::parse(file_get_contents($yamlConfigurationFilename)));
46 if (isset($config['imports'])) {
47 foreach ((array) $config['imports'] as $file) {
48 if (0 === strpos($file, '/')) {
52 if ($realpath = realpath(dirname($yamlConfigurationFilename).'/'.$file)) {
53 $imports[] = $realpath;
62 $importsBuilder = new static($imports);
64 // We want to reconfigure the imports builder to have the
65 // same basic configuration as this instance.
66 $this->reconfigure($importsBuilder);
68 $configuration->import($importsBuilder->build());
70 $internalImports = $configuration->get('imports');
72 $internalImports = null;
75 $configuration->importRaw($config);
77 if ($internalImports) {
78 foreach ((array) $internalImports as $import) {
79 $configuration->append('imports', $import);
83 return $configuration;