[DI] Impossible to set an environment variable and then an array as container parameter

This commit is contained in:
Matthieu 2017-12-05 13:50:29 +01:00 committed by Fabien Potencier
parent b783602622
commit 484a082eb1
2 changed files with 27 additions and 5 deletions

View File

@ -1294,6 +1294,11 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
$format = '%%env(%s)%%';
}
$bag = $this->getParameterBag();
if (true === $format) {
$value = $bag->resolveValue($value);
}
if (is_array($value)) {
$result = array();
foreach ($value as $k => $v) {
@ -1306,11 +1311,6 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
if (!is_string($value)) {
return $value;
}
$bag = $this->getParameterBag();
if (true === $format) {
$value = $bag->resolveValue($value);
}
$envPlaceholders = $bag instanceof EnvPlaceholderParameterBag ? $bag->getEnvPlaceholders() : $this->envPlaceholders;
foreach ($envPlaceholders as $env => $placeholders) {

View File

@ -615,6 +615,28 @@ class ContainerBuilderTest extends TestCase
unset($_ENV['DUMMY_ENV_VAR'], $_SERVER['DUMMY_SERVER_VAR'], $_SERVER['HTTP_DUMMY_VAR']);
}
public function testResolveEnvValuesWithArray()
{
$_ENV['ANOTHER_DUMMY_ENV_VAR'] = 'dummy';
$dummyArray = array('1' => 'one', '2' => 'two');
$container = new ContainerBuilder();
$container->setParameter('dummy', '%env(ANOTHER_DUMMY_ENV_VAR)%');
$container->setParameter('dummy2', $dummyArray);
$container->resolveEnvPlaceholders('%dummy%', true);
$container->resolveEnvPlaceholders('%dummy2%', true);
$this->assertInternalType('array', $container->resolveEnvPlaceholders('%dummy2%', true));
foreach ($dummyArray as $key => $value) {
$this->assertArrayHasKey($key, $container->resolveEnvPlaceholders('%dummy2%', true));
}
unset($_ENV['ANOTHER_DUMMY_ENV_VAR']);
}
public function testCompileWithResolveEnv()
{
putenv('DUMMY_ENV_VAR=du%%y');