Skip to content

Commit 818b758

Browse files
committed
Merge branch '4.4' into 5.0
* 4.4: [DependencyInjection][Config] Use several placeholder unique prefixes for dynamic placeholder values [Mime] Keep Sender full address when used by non-SMTP transports Update MimeTypes.php
2 parents b840f53 + 8726b37 commit 818b758

File tree

2 files changed

+60
-2
lines changed

2 files changed

+60
-2
lines changed

Compiler/MergeExtensionConfigurationPass.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ public function process(ContainerBuilder $container)
7979
$container->getParameterBag()->mergeEnvPlaceholders($resolvingBag);
8080
}
8181

82-
throw $e;
83-
} finally {
8482
if ($configAvailable) {
8583
BaseNode::resetPlaceholders();
8684
}
85+
86+
throw $e;
8787
}
8888

8989
if ($resolvingBag instanceof MergeExtensionConfigurationParameterBag) {
@@ -95,6 +95,10 @@ public function process(ContainerBuilder $container)
9595
$container->getParameterBag()->add($parameters);
9696
}
9797

98+
if ($configAvailable) {
99+
BaseNode::resetPlaceholders();
100+
}
101+
98102
$container->addDefinitions($definitions);
99103
$container->addAliases($aliases);
100104
}

Tests/Compiler/MergeExtensionConfigurationPassTest.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\Config\Definition\BaseNode;
1516
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
1617
use Symfony\Component\Config\Definition\ConfigurationInterface;
1718
use Symfony\Component\Config\Resource\FileResource;
@@ -128,6 +129,23 @@ public function testThrowingExtensionsGetMergedBag()
128129

129130
$this->assertSame(['FOO'], array_keys($container->getParameterBag()->getEnvPlaceholders()));
130131
}
132+
133+
public function testReuseEnvPlaceholderGeneratedByPreviousExtension()
134+
{
135+
if (!property_exists(BaseNode::class, 'placeholderUniquePrefixes')) {
136+
$this->markTestSkipped('This test requires symfony/config ^4.4.11|^5.0.11|^5.1.3');
137+
}
138+
139+
$container = new ContainerBuilder();
140+
$container->registerExtension(new FooExtension());
141+
$container->registerExtension(new TestCccExtension());
142+
$container->prependExtensionConfig('foo', ['bool_node' => '%env(bool:MY_ENV_VAR)%']);
143+
$container->prependExtensionConfig('test_ccc', ['bool_node' => '%env(bool:MY_ENV_VAR)%']);
144+
145+
(new MergeExtensionConfigurationPass())->process($container);
146+
147+
$this->addToAssertionCount(1);
148+
}
131149
}
132150

133151
class FooConfiguration implements ConfigurationInterface
@@ -139,6 +157,7 @@ public function getConfigTreeBuilder(): TreeBuilder
139157
->children()
140158
->scalarNode('bar')->end()
141159
->scalarNode('baz')->end()
160+
->booleanNode('bool_node')->end()
142161
->end();
143162

144163
return $treeBuilder;
@@ -166,6 +185,8 @@ public function load(array $configs, ContainerBuilder $container)
166185
$container->getParameterBag()->get('env(BOZ)');
167186
$container->resolveEnvPlaceholders($config['baz']);
168187
}
188+
189+
$container->setParameter('foo.param', 'ccc');
169190
}
170191
}
171192

@@ -194,3 +215,36 @@ public function load(array $configs, ContainerBuilder $container)
194215
throw new \Exception();
195216
}
196217
}
218+
219+
final class TestCccConfiguration implements ConfigurationInterface
220+
{
221+
public function getConfigTreeBuilder(): TreeBuilder
222+
{
223+
$treeBuilder = new TreeBuilder('test_ccc');
224+
$treeBuilder->getRootNode()
225+
->children()
226+
->booleanNode('bool_node')->end()
227+
->end();
228+
229+
return $treeBuilder;
230+
}
231+
}
232+
233+
final class TestCccExtension extends Extension
234+
{
235+
public function getAlias(): string
236+
{
237+
return 'test_ccc';
238+
}
239+
240+
public function getConfiguration(array $config, ContainerBuilder $container): ?ConfigurationInterface
241+
{
242+
return new TestCccConfiguration();
243+
}
244+
245+
public function load(array $configs, ContainerBuilder $container)
246+
{
247+
$configuration = $this->getConfiguration($configs, $container);
248+
$this->processConfiguration($configuration, $configs);
249+
}
250+
}

0 commit comments

Comments
 (0)