X-Git-Url: https://git.rapsys.eu/packbundle/blobdiff_plain/841a8835e903a514e2e44706bf4974f3cc21104b..2fca74b53635d6de665cedd189ee6356083dc8e3:/DependencyInjection/RapsysPackExtension.php?ds=sidebyside diff --git a/DependencyInjection/RapsysPackExtension.php b/DependencyInjection/RapsysPackExtension.php index 9bcd117..bc155fc 100644 --- a/DependencyInjection/RapsysPackExtension.php +++ b/DependencyInjection/RapsysPackExtension.php @@ -17,14 +17,69 @@ class RapsysPackExtension extends Extension { * {@inheritdoc} */ public function load(array $configs, ContainerBuilder $container) { - $configuration = new Configuration($container->getParameter('kernel.project_dir').'/web/'); + //Load configuration + $loader = new Loader\YamlFileLoader($container, new FileLocator('config/packages')); + $loader->load($this->getAlias().'.yaml'); + + //Load configuration + $configuration = $this->getConfiguration($configs, $container); $config = $this->processConfiguration($configuration, $configs); - $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); - $loader->load('services.yml'); + //Set default config in parameter + if (!$container->hasParameter($alias = $this->getAlias())) { + $container->setParameter($alias, $config[$alias]); + //Fill missing entries + } else { + //Change in config flag + $change = false; + + //Iterate on each user configuration keys + foreach($container->getParameter($alias) as $k => $v) { + //Check if value is an array + if (is_array($v)) { + //Iterate on each array keys + foreach($v as $sk => $sv) { + //Check if sub value is an array + if (is_array($sv)) { + //TODO: implement sub sub key merging ? (or recursive ?) + @trigger_error('Nested level > 2 not yet implemented here', E_USER_ERROR); + //Save sub value + } else { + //Trigger changed flag + $change = true; + //Replace default value with user provided one + $config[$alias][$k][$sk] = $sv; + } + } + //Save value + } else { + //Trigger changed flag + $change = true; + //Replace default value with user provided one + $config[$alias][$k] = $v; + } + } + + //Check if change occured + if ($change) { + //Save parameters + $container->setParameter($alias, $config[$alias]); + } + } } + /** + * {@inheritdoc} + */ public function getConfiguration(array $configs, ContainerBuilder $container) { - return new Configuration($container->getParameter('kernel.project_dir').'/web/'); + //Get configuration instance with resolved public path + return new Configuration($container->getParameter('kernel.project_dir').'/public/'); + } + + /** + * {@inheritdoc} + */ + public function getAlias() { + return 'rapsys_pack'; } }