X-Git-Url: https://git.rapsys.eu/.gitweb.cgi/packbundle/blobdiff_plain/575d559e5aea5e099ba7784547b1aa359d28fb8c..2fca74b53635d6de665cedd189ee6356083dc8e3:/DependencyInjection/RapsysPackExtension.php diff --git a/DependencyInjection/RapsysPackExtension.php b/DependencyInjection/RapsysPackExtension.php index b200abd..bc155fc 100644 --- a/DependencyInjection/RapsysPackExtension.php +++ b/DependencyInjection/RapsysPackExtension.php @@ -12,17 +12,74 @@ use Symfony\Component\DependencyInjection\Loader; * * @link http://symfony.com/doc/current/cookbook/bundles/extension.html */ -class RapsysPackExtension extends Extension -{ - /** - * {@inheritdoc} - */ - public function load(array $configs, ContainerBuilder $container) - { - $configuration = new Configuration(); - $config = $this->processConfiguration($configuration, $configs); - - $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); - $loader->load('services.yml'); - } +class RapsysPackExtension extends Extension { + /** + * {@inheritdoc} + */ + public function load(array $configs, ContainerBuilder $container) { + //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); + + //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) { + //Get configuration instance with resolved public path + return new Configuration($container->getParameter('kernel.project_dir').'/public/'); + } + + /** + * {@inheritdoc} + */ + public function getAlias() { + return 'rapsys_pack'; + } }