8000 [DependencyInjection] Handle `null` factory class in `ContainerBuilde… · symfony/symfony@fdd8a62 · GitHub
[go: up one dir, main page]

Skip to content

Commit fdd8a62

Browse files
committed
[DependencyInjection] Handle null factory class in ContainerBuilder::createService
1 parent 6f2e603 commit fdd8a62

File tree

2 files changed

+5
-2
lines changed

2 files changed

+5
-2
lines changed

src/Symfony/Component/DependencyInjection/ContainerBuilder.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,11 +1075,12 @@ private function createService(Definition $definition, array &$inlineServices, b
10751075
require_once $parameterBag->resolveValue($definition->getFile());
10761076
}
10771077

1078+
$class = $parameterBag->resolveValue($definition->getClass());
10781079
$arguments = $this->doResolveServices($parameterBag->unescapeValue($parameterBag->resolveValue($definition->getArguments())), $inlineServices, $isConstructorArgument);
10791080

10801081
if (null !== $factory = $definition->getFactory()) {
10811082
if (\is_array($factory)) {
1082-
$factory = [$this->doResolveServices($parameterBag->resolveValue($factory[0]), $inlineServices, $isConstructorArgument), $factory[1]];
1083+
$factory = [$this->doResolveServices($parameterBag->resolveValue($factory[0]), $inlineServices, $isConstructorArgument) ?? $class, $factory[1]];
10831084
} elseif (!\is_string($factory)) {
10841085
throw new RuntimeException(sprintf('Cannot create service "%s" because of invalid factory.', $id));
10851086
}
@@ -1104,7 +1105,7 @@ private function createService(Definition $definition, array &$inlineServices, b
11041105
}
11051106
}
11061107
} else {
1107-
$r = new \ReflectionClass($parameterBag->resolveValue($definition->getClass()));
1108+
$r = new \ReflectionClass($class);
11081109

11091110
$service = null === $r->getConstructor() ? $r->newInstance() : $r->newInstanceArgs($arguments);
11101111

src/Symfony/Component/DependencyInjection/Tests/ContainerBuilderTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,11 +443,13 @@ public function testCreateServiceFactory()
443443
$builder->register('qux', 'Bar\FooClass')->setFactory(['Bar\FooClass', 'getInstance']);
444444
$builder->register('bar', 'Bar\FooClass')->setFactory([new Definition('Bar\FooClass'), 'getInstance']);
445445
$builder->register('baz', 'Bar\FooClass')->setFactory([new Reference('bar'), 'getInstance']);
446+
$builder->register('quux', 'Bar\FooClass')->setFactory([null, 'getInstance']);
446447

447448
$this->assertTrue($builder->get('foo')->called, '->createService() calls the factory method to create the service instance');
448449
$this->assertTrue($builder->get('qux')->called, '->createService() calls the factory method to create the service instance');
449450
$this->assertTrue($builder->get('bar')->called, '->createService() uses anonymous service as factory');
450451
$this->assertTrue($builder->get('baz')->called, '->createService() uses another service as factory');
452+
$this->assertTrue($builder->get('quux')->called, '->createService() uses same class as factory');
451453
}
452454

453455
public function testCreateServiceMethodCalls()

0 commit comments

Comments
 (0)
0