diff --git a/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php b/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php index eb38911c35..2596b4e19a 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php @@ -50,10 +50,10 @@ class MergeExtensionConfigurationPass implements CompilerPassInterface $extension->load($config, $tmpContainer); $container->merge($tmpContainer); + $container->getParameterBag()->add($parameters); } $container->addDefinitions($definitions); $container->addAliases($aliases); - $container->getParameterBag()->add($parameters); } } diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php new file mode 100644 index 0000000000..c16c4c5570 --- /dev/null +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php @@ -0,0 +1,67 @@ +getParameterBag()->set('key', 'user_value'); + $container->registerExtension(new ExtensionA()); + $container->loadFromExtension('a'); + $container->registerExtension($b = new ExtensionB()); + $container->loadFromExtension('b'); + + $pass = new MergeExtensionConfigurationPass(); + $pass->process($container); + + $this->assertSame('user_value', $container->getParameter('key')); + $this->assertSame('user_value', $b->parameterKey); + } +} + +abstract class Extension implements ExtensionInterface +{ + public function getNamespace() + { + return 'http://example.org/schema/dic/'.$this->getAlias(); + } + + public function getXsdValidationBasePath() + { + return false; + } +} + +class ExtensionA extends Extension +{ + public function load(array $config, ContainerBuilder $container) + { + $container->getParameterBag()->set('key', 'default_value'); + } + + public function getAlias() + { + return 'a'; + } +} + +class ExtensionB extends Extension +{ + public $parameterKey; + + public function load(array $config, ContainerBuilder $container) + { + $this->parameterKey = $container->getParameter('key'); + } + + public function getAlias() + { + return 'b'; + } +}