From 137518de5d693c9d609944e4cf6a787546d79eab Mon Sep 17 00:00:00 2001 From: Yonel Ceruto Date: Fri, 17 Nov 2023 12:44:30 -0500 Subject: [PATCH] add argument to prepend extension config --- src/Symfony/Component/DependencyInjection/CHANGELOG.md | 5 +++++ .../Loader/Configurator/ContainerConfigurator.php | 8 +++++++- .../Tests/Extension/AbstractExtensionTest.php | 2 +- .../Tests/Fixtures/AcmeFooBundle/AcmeFooBundle.php | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/DependencyInjection/CHANGELOG.md b/src/Symfony/Component/DependencyInjection/CHANGELOG.md index 8930b03ab6ff..d3ae6c6c359c 100644 --- a/src/Symfony/Component/DependencyInjection/CHANGELOG.md +++ b/src/Symfony/Component/DependencyInjection/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +7.1 +--- + + * Add argument `$prepend` to `ContainerConfigurator::extension()` to prepend the configuration instead of appending it + 7.0 --- diff --git a/src/Symfony/Component/DependencyInjection/Loader/Configurator/ContainerConfigurator.php b/src/Symfony/Component/DependencyInjection/Loader/Configurator/ContainerConfigurator.php index 883b5542ac51..ad1110e17442 100644 --- a/src/Symfony/Component/DependencyInjection/Loader/Configurator/ContainerConfigurator.php +++ b/src/Symfony/Component/DependencyInjection/Loader/Configurator/ContainerConfigurator.php @@ -48,8 +48,14 @@ public function __construct(ContainerBuilder $container, PhpFileLoader $loader, $this->env = $env; } - final public function extension(string $namespace, array $config): void + final public function extension(string $namespace, array $config, bool $prepend = false): void { + if ($prepend) { + $this->container->prependExtensionConfig($namespace, static::processValue($config)); + + return; + } + if (!$this->container->hasExtension($namespace)) { $extensions = array_filter(array_map(fn (ExtensionInterface $ext) => $ext->getAlias(), $this->container->getExtensions())); throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in "%s"). Looked for namespace "%s", found "%s".', $namespace, $this->file, $namespace, $extensions ? implode('", "', $extensions) : 'none')); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Extension/AbstractExtensionTest.php b/src/Symfony/Component/DependencyInjection/Tests/Extension/AbstractExtensionTest.php index cb56983d365c..9180ab8342da 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Extension/AbstractExtensionTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Extension/AbstractExtensionTest.php @@ -63,7 +63,7 @@ public function prependExtension(ContainerConfigurator $container, ContainerBuil $container->extension('third', ['foo' => 'append']); // prepend config - $builder->prependExtensionConfig('third', ['foo' => 'prepend']); + $container->extension('third', ['foo' => 'prepend'], true); } }; diff --git a/src/Symfony/Component/HttpKernel/Tests/Fixtures/AcmeFooBundle/AcmeFooBundle.php b/src/Symfony/Component/HttpKernel/Tests/Fixtures/AcmeFooBundle/AcmeFooBundle.php index 4fba6260f933..959536ecbdc5 100644 --- a/src/Symfony/Component/HttpKernel/Tests/Fixtures/AcmeFooBundle/AcmeFooBundle.php +++ b/src/Symfony/Component/HttpKernel/Tests/Fixtures/AcmeFooBundle/AcmeFooBundle.php @@ -31,7 +31,7 @@ public function configure(DefinitionConfigurator $definition): void public function prependExtension(ContainerConfigurator $container, ContainerBuilder $builder): void { - $container->extension('loaded', ['bar' => 'baz']); + $container->extension('loaded', ['bar' => 'baz'], true); } public function loadExtension(array $config, ContainerConfigurator $container, ContainerBuilder $builder): void