From 9fbdcdbeb978aedae79636f5fa9cd9d9d6583cb0 Mon Sep 17 00:00:00 2001 From: Romain Pierre Date: Mon, 16 Apr 2018 10:25:21 +0200 Subject: [PATCH] Fixes the valid placeholder types for variable node --- .../Component/Config/Definition/BaseNode.php | 2 +- .../Compiler/ValidateEnvPlaceholdersPassTest.php | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Config/Definition/BaseNode.php b/src/Symfony/Component/Config/Definition/BaseNode.php index 2cae80e7e0..a49e0b0bdc 100644 --- a/src/Symfony/Component/Config/Definition/BaseNode.php +++ b/src/Symfony/Component/Config/Definition/BaseNode.php @@ -539,7 +539,7 @@ abstract class BaseNode implements NodeInterface $knownTypes = array_keys(self::$placeholders[$this->handlingPlaceholder]); $validTypes = $this->getValidPlaceholderTypes(); - if (array_diff($knownTypes, $validTypes)) { + if ($validTypes && array_diff($knownTypes, $validTypes)) { $e = new InvalidTypeException(sprintf( 'Invalid type for path "%s". Expected %s, but got %s.', $this->getPath(), diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php index badbf8522f..bd554cd285 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ValidateEnvPlaceholdersPassTest.php @@ -209,6 +209,19 @@ class ValidateEnvPlaceholdersPassTest extends TestCase $this->assertSame($expected, $container->resolveEnvPlaceholders($ext->getConfig())); } + public function testEnvWithVariableNode(): void + { + $container = new ContainerBuilder(); + $container->registerExtension($ext = new EnvExtension()); + $container->prependExtensionConfig('env_extension', $expected = array( + 'variable_node' => '%env(SOME)%', + )); + + $this->doProcess($container); + + $this->assertSame($expected, $container->resolveEnvPlaceholders($ext->getConfig())); + } + private function doProcess(ContainerBuilder $container): void { (new MergeExtensionConfigurationPass())->process($container); @@ -247,6 +260,7 @@ class EnvConfiguration implements ConfigurationInterface ->end() ->arrayNode('simple_array_node')->end() ->enumNode('enum_node')->values(array('a', 'b'))->end() + ->variableNode('variable_node')->end() ->end(); return $treeBuilder;