Skip to content

Commit 036989f

Browse files
committed
bug #13353 [DependencyInjection] Fix missing ExpressionLanguageProviders (szicsu)
This PR was merged into the 2.6 branch. Discussion ---------- [DependencyInjection] Fix missing ExpressionLanguageProviders Fix missing ExpressionLanguageProviders extension bild | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | ~ | License | MIT | Doc PR | ~ Commits ------- b248368 [DependencyInjection] Fix missing ExpressionLanguageProviders on extension bild
2 parents 00f7b46 + da10a5d commit 036989f

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

Compiler/MergeExtensionConfigurationPass.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public function process(ContainerBuilder $container)
2929
$parameters = $container->getParameterBag()->all();
3030
$definitions = $container->getDefinitions();
3131
$aliases = $container->getAliases();
32+
$exprLangProviders = $container->getExpressionLanguageProviders();
3233

3334
foreach ($container->getExtensions() as $extension) {
3435
if ($extension instanceof PrependExtensionInterface) {
@@ -47,6 +48,10 @@ public function process(ContainerBuilder $container)
4748
$tmpContainer->setResourceTracking($container->isTrackingResources());
4849
$tmpContainer->addObjectResource($extension);
4950

51+
foreach ($exprLangProviders as $provider) {
52+
$tmpContainer->addExpressionLanguageProvider($provider);
53+
}
54+
5055
$extension->load($config, $tmpContainer);
5156

5257
$container->merge($tmpContainer);
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
4+
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
5+
6+
use Symfony\Component\DependencyInjection\Compiler\MergeExtensionConfigurationPass;
7+
use Symfony\Component\DependencyInjection\ContainerBuilder;
8+
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBag;
9+
10+
class MergeExtensionConfigurationPassTest extends \PHPUnit_Framework_TestCase
11+
{
12+
public function testExpressionLanguageProviderForwarding()
13+
{
14+
if (true !== class_exists('Symfony\\Component\\ExpressionLanguage\\ExpressionLanguage')) {
15+
$this->markTestSkipped('The ExpressionLanguage component isn\'t available!');
16+
}
17+
18+
$tmpProviders = array();
19+
20+
$extension = $this->getMock('Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface');
21+
$extension->expects($this->any())
22+
->method('getXsdValidationBasePath')
23+
->will($this->returnValue(false));
24+
$extension->expects($this->any())
25+
->method('getNamespace')
26+
->will($this->returnValue('http://example.org/schema/dic/foo'));
27+
$extension->expects($this->any())
28+
->method('getAlias')
29+
->will($this->returnValue('foo'));
30+
$extension->expects($this->once())
31+
->method('load')
32+
->will($this->returnCallback(function (array $config, ContainerBuilder $container) use (&$tmpProviders) {
33+
$tmpProviders = $container->getExpressionLanguageProviders();
34+
}));
35+
36+
$provider = $this->getMock('Symfony\\Component\\ExpressionLanguage\\ExpressionFunctionProviderInterface');
37+
$container = new ContainerBuilder(new ParameterBag());
38+
$container->registerExtension($extension);
39+
$container->prependExtensionConfig('foo', array('bar' => true ));
40+
$container->addExpressionLanguageProvider($provider);
41+
42+
$pass = new MergeExtensionConfigurationPass();
43+
$pass->process($container);
44+
45+
$this->assertEquals(array($provider), $tmpProviders);
46+
}
47+
}

0 commit comments

Comments
 (0)