Skip to content

Commit 4e01371

Browse files
bug symfony#54970 [DependencyInjection] Process PHP configs using the ContainerConfigurator (MatTheCat)
This PR was merged into the 7.1 branch. Discussion ---------- [DependencyInjection] Process PHP configs using the ContainerConfigurator | Q | A | ------------- | --- | Branch? | 7.1 | Bug fix? | yes | New feature? | no | Deprecations? | no | Issues | Fix symfony#54852 | License | MIT Since symfony#52843, `ContainerConfigurator::extension` is not called anymore which means `ParamConfigurator`s are no longer processed and converted to strings, and make nodes validation fail: e.g. `framework.secret` would receive an `EnvConfigurator` and throw because it is not a scalar. Commits ------- e6dc6be [DependencyInjection] Process PHP configs using the ContainerConfigurator
2 parents c58c599 + e6dc6be commit 4e01371

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

src/Symfony/Component/DependencyInjection/Loader/PhpFileLoader.php

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -145,16 +145,8 @@ class_exists(ContainerConfigurator::class);
145145

146146
$callback(...$arguments);
147147

148-
$this->loadFromExtensions($configBuilders);
149-
}
150-
151-
/**
152-
* @param iterable<ConfigBuilderInterface> $configBuilders
153-
*/
154-
private function loadFromExtensions(iterable $configBuilders): void
155-
{
156148
foreach ($configBuilders as $configBuilder) {
157-
$this->loadExtensionConfig($configBuilder->getExtensionAlias(), $configBuilder->toArray());
149+
$containerConfigurator->extension($configBuilder->getExtensionAlias(), $configBuilder->toArray(), $this->prepend);
158150
}
159151

160152
$this->loadExtensionConfigs();
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?php
2+
3+
use Symfony\Component\DependencyInjection\Tests\Fixtures\AcmeConfig;
4+
use function Symfony\Component\DependencyInjection\Loader\Configurator\env;
5+
6+
return function (AcmeConfig $config) {
7+
$config->color(env('COLOR'));
8+
};

src/Symfony/Component/DependencyInjection/Tests/Loader/PhpFileLoaderTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,4 +243,14 @@ public function testServiceWithServiceLocatorArgument()
243243
$values = ['foo' => new Definition(\stdClass::class), 'bar' => new Definition(\stdClass::class)];
244244
$this->assertEquals([new ServiceLocatorArgument($values)], $container->getDefinition('locator_dependent_inline_service')->getArguments());
245245
}
246+
247+
public function testConfigBuilderEnvConfigurator()
248+
{
249+
$container = new ContainerBuilder();
250+
$container->registerExtension(new \AcmeExtension());
251+
$loader = new PhpFileLoader($container, new FileLocator(\dirname(__DIR__).'/Fixtures'), 'prod', new ConfigBuilderGenerator(sys_get_temp_dir()), true);
252+
$loader->load('config/config_builder_env_configurator.php');
253+
254+
$this->assertIsString($container->getExtensionConfig('acme')[0]['color']);
255+
}
246256
}

0 commit comments

Comments
 (0)