diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php index aa932e9445..9733e5d094 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php @@ -66,6 +66,7 @@ class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass return $this->resolveArrays || !$v || !is_array($v) ? $v : $value; } if ($value instanceof Definition) { + $value->setBindings($this->processValue($value->getBindings())); $changes = $value->getChanges(); if (isset($changes['class'])) { $value->setClass($this->bag->resolveValue($value->getClass())); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php index b9459729e2..a34e007de7 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php @@ -64,6 +64,13 @@ class ResolveParameterPlaceHoldersPassTest extends TestCase $this->assertSame('foo', $this->container->getAlias('bar')->__toString()); } + public function testBindingsShouldBeResolved() + { + list($boundValue) = $this->container->getDefinition('foo')->getBindings()['$baz']->getValues(); + + $this->assertSame($this->container->getParameterBag()->resolveValue('%env(BAZ)%'), $boundValue); + } + private function createContainerBuilder() { $containerBuilder = new ContainerBuilder(); @@ -84,6 +91,7 @@ class ResolveParameterPlaceHoldersPassTest extends TestCase $fooDefinition->addMethodCall('%foo.method%', array('%foo.arg1%', '%foo.arg2%')); $fooDefinition->setProperty('%foo.property.name%', '%foo.property.value%'); $fooDefinition->setFile('%foo.file%'); + $fooDefinition->setBindings(array('$baz' => '%env(BAZ)%')); $containerBuilder->setAlias('%alias.id%', 'foo'); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services26.php b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services26.php index 6519a9dff7..257a145c6f 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services26.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services26.php @@ -29,6 +29,7 @@ class Symfony_DI_PhpDumper_Test_EnvParameters extends Container $this->services = array(); $this->methodMap = array( + 'bar' => 'getBarService', 'test' => 'getTestService', ); @@ -60,6 +61,16 @@ class Symfony_DI_PhpDumper_Test_EnvParameters extends Container return true; } + /** + * Gets the public 'bar' shared service. + * + * @return \Symfony\Component\DependencyInjection\Tests\Fixtures\Bar + */ + protected function getBarService() + { + return $this->services['bar'] = new \Symfony\Component\DependencyInjection\Tests\Fixtures\Bar($this->getEnv('QUZ')); + } + /** * Gets the public 'test' shared service. * diff --git a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services26.yml b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services26.yml index aa44b4d77a..a1f235a7c1 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services26.yml +++ b/src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services26.yml @@ -15,3 +15,8 @@ services: - '%env(Bar)%' - 'foo%bar%baz' - '%baz%' + bar: + class: Symfony\Component\DependencyInjection\Tests\Fixtures\Bar + public: true + bind: + $quz: '%env(QUZ)%'