Fix env fallback to an unresolved variable

This commit is contained in:
Jérémy Derussé 2018-12-01 17:49:08 +01:00 committed by Nicolas Grekas
parent 8a6090793b
commit ad6df01b9f
2 changed files with 22 additions and 4 deletions

View File

@ -1534,11 +1534,15 @@ class ContainerBuilder extends Container implements TaggedContainerInterface
return $value;
}
foreach ($bag->getEnvPlaceholders() as $env => $placeholders) {
if (isset($placeholders[$value])) {
$bag = new ParameterBag($bag->all());
$envPlaceholders = $bag->getEnvPlaceholders();
if (isset($envPlaceholders[$name][$value])) {
$bag = new ParameterBag($bag->all());
return $bag->unescapeValue($bag->get("env($name)"));
return $bag->unescapeValue($bag->get("env($name)"));
}
foreach ($envPlaceholders as $env => $placeholders) {
if (isset($placeholders[$value])) {
return $this->getEnv($env);
}
}

View File

@ -738,6 +738,20 @@ class ContainerBuilderTest extends TestCase
$this->assertSame('someFooBar', $container->getParameter('baz'));
}
public function testFallbackEnv()
{
putenv('DUMMY_FOO=foo');
$container = new ContainerBuilder();
$container->setParameter('foo', '%env(DUMMY_FOO)%');
$container->setParameter('bar', 'bar%env(default:foo:DUMMY_BAR)%');
$container->compile(true);
putenv('DUMMY_FOO');
$this->assertSame('barfoo', $container->getParameter('bar'));
}
public function testCastEnv()
{
$container = new ContainerBuilder();