Skip to content

Commit 00af1f6

Browse files
committed
resolve class parameters in service factories
1 parent d68c307 commit 00af1f6

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

Compiler/ResolveParameterPlaceHoldersPass.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,13 @@ public function process(ContainerBuilder $container)
3939
$definition->setArguments($parameterBag->resolveValue($definition->getArguments()));
4040
$definition->setFactoryClass($parameterBag->resolveValue($definition->getFactoryClass()));
4141

42+
$factory = $definition->getFactory();
43+
44+
if (is_array($factory) && isset($factory[0])) {
45+
$factory[0] = $parameterBag->resolveValue($factory[0]);
46+
$definition->setFactory($factory);
47+
}
48+
4249
$calls = array();
4350
foreach ($definition->getMethodCalls() as $name => $arguments) {
4451
$calls[$parameterBag->resolveValue($name)] = $parameterBag->resolveValue($arguments);

Tests/Compiler/ResolveParameterPlaceHoldersPassTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ public function testFactoryClassParametersShouldBeResolved()
3838
$this->assertSame('FooFactory', $this->fooDefinition->getFactoryClass());
3939
}
4040

41+
public function testClassOfFactoryParametersShouldBeResolved()
42+
{
43+
$this->assertSame(array('FooFactory', 'getFoo'), $this->fooDefinition->getFactory());
44+
}
45+
4146
public function testArgumentParametersShouldBeResolved()
4247
{
4348
$this->assertSame(array('bar', 'baz'), $this->fooDefinition->getArguments());
@@ -79,6 +84,7 @@ private function createContainerBuilder()
7984

8085
$fooDefinition = $containerBuilder->register('foo', '%foo.class%');
8186
$fooDefinition->setFactoryClass('%foo.factory.class%');
87+
$fooDefinition->setFactory(array('%foo.factory.class%', 'getFoo'));
8288
$fooDefinition->setArguments(array('%foo.arg1%', '%foo.arg2%'));
8389
$fooDefinition->addMethodCall('%foo.method%', array('%foo.arg1%', '%foo.arg2%'));
8490
$fooDefinition->setProperty('%foo.property.name%', '%foo.property.value%');

0 commit comments

Comments
 (0)