diff --git a/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php b/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php index e7c7caf17c83..35d46cf83d22 100644 --- a/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php +++ b/src/Symfony/Component/DependencyInjection/Compiler/ResolveParameterPlaceHoldersPass.php @@ -39,6 +39,13 @@ public function process(ContainerBuilder $container) $definition->setArguments($parameterBag->resolveValue($definition->getArguments())); $definition->setFactoryClass($parameterBag->resolveValue($definition->getFactoryClass())); + $factory = $definition->getFactory(); + + if (is_array($factory) && isset($factory[0])) { + $factory[0] = $parameterBag->resolveValue($factory[0]); + $definition->setFactory($factory); + } + $calls = array(); foreach ($definition->getMethodCalls() as $name => $arguments) { $calls[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($arguments); diff --git a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php index e08b84a73ac0..03c52ef382ce 100644 --- a/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php +++ b/src/Symfony/Component/DependencyInjection/Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php @@ -38,6 +38,11 @@ public function testFactoryClassParametersShouldBeResolved() $this->assertSame('FooFactory', $this->fooDefinition->getFactoryClass()); } + public function testClassOfFactoryParametersShouldBeResolved() + { + $this->assertSame(array('FooFactory', 'getFoo'), $this->fooDefinition->getFactory()); + } + public function testArgumentParametersShouldBeResolved() { $this->assertSame(array('bar', 'baz'), $this->fooDefinition->getArguments()); @@ -79,6 +84,7 @@ private function createContainerBuilder() $fooDefinition = $containerBuilder->register('foo', '%foo.class%'); $fooDefinition->setFactoryClass('%foo.factory.class%'); + $fooDefinition->setFactory(array('%foo.factory.class%', 'getFoo')); $fooDefinition->setArguments(array('%foo.arg1%', '%foo.arg2%')); $fooDefinition->addMethodCall('%foo.method%', array('%foo.arg1%', '%foo.arg2%')); $fooDefinition->setProperty('%foo.property.name%', '%foo.property.value%');