Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdda43ed

Browse files
GuilhemNfabpot
authored andcommitted
[DI] Fix anonymous factories/configurators support
1 parent47740ce commitdda43ed

File tree

2 files changed

+23
-28
lines changed

2 files changed

+23
-28
lines changed

‎src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php‎

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,7 @@ private function parseDefinition(\DOMElement $service, $file, array $defaults =
259259
if ($function =$factory->getAttribute('function')) {
260260
$definition->setFactory($function);
261261
}else {
262-
$factoryService =$this->getChildren($factory,'service');
263-
264-
if (isset($factoryService[0])) {
265-
$class =$this->parseDefinition($factoryService[0],$file);
266-
}elseif ($childService =$factory->getAttribute('service')) {
262+
if ($childService =$factory->getAttribute('service')) {
267263
$class =newReference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE);
268264
}else {
269265
$class =$factory->hasAttribute('class') ?$factory->getAttribute('class') :null;
@@ -278,11 +274,7 @@ private function parseDefinition(\DOMElement $service, $file, array $defaults =
278274
if ($function =$configurator->getAttribute('function')) {
279275
$definition->setConfigurator($function);
280276
}else {
281-
$configuratorService =$this->getChildren($configurator,'service');
282-
283-
if (isset($configuratorService[0])) {
284-
$class =$this->parseDefinition($configuratorService[0],$file);
285-
}elseif ($childService =$configurator->getAttribute('service')) {
277+
if ($childService =$configurator->getAttribute('service')) {
286278
$class =newReference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE);
287279
}else {
288280
$class =$configurator->getAttribute('class');
@@ -379,13 +371,14 @@ private function processAnonymousServices(\DOMDocument $xml, $file)
379371
$xpath->registerNamespace('container',self::NS);
380372

381373
// anonymous services as arguments/properties
382-
if (false !==$nodes =$xpath->query('//container:argument[@type="service"][not(@id)]|//container:property[@type="service"][not(@id)]')) {
374+
if (false !==$nodes =$xpath->query('//container:argument[@type="service"][not(@id)]|//container:property[@type="service"][not(@id)]|//container:factory[not(@service)]|//container:configurator[not(@service)]')) {
383375
foreach ($nodesas$node) {
384-
// give it a unique name
385-
$id =sprintf('%d_%s', ++$count,hash('sha256',$file));
386-
$node->setAttribute('id',$id);
387-
388376
if ($services =$this->getChildren($node,'service')) {
377+
// give it a unique name
378+
$id =sprintf('%d_%s', ++$count,hash('sha256',$file));
379+
$node->setAttribute('id',$id);
380+
$node->setAttribute('service',$id);
381+
389382
$definitions[$id] =array($services[0],$file,false);
390383
$services[0]->setAttribute('id',$id);
391384

@@ -417,8 +410,6 @@ private function processAnonymousServices(\DOMDocument $xml, $file)
417410
$tmpDomElement =new \DOMElement('_services',null,self::NS);
418411
$domElement->parentNode->replaceChild($tmpDomElement,$domElement);
419412
$tmpDomElement->setAttribute('id',$id);
420-
}else {
421-
$domElement->parentNode->removeChild($domElement);
422413
}
423414
}
424415
}

‎src/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php‎

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
usePHPUnit\Framework\TestCase;
1515
useSymfony\Component\DependencyInjection\Argument\IteratorArgument;
16-
useSymfony\Component\DependencyInjection\ContainerInterface;
1716
useSymfony\Component\DependencyInjection\ContainerBuilder;
1817
useSymfony\Component\DependencyInjection\Reference;
1918
useSymfony\Component\DependencyInjection\Loader\XmlFileLoader;
@@ -539,23 +538,28 @@ public function testLoadInlinedServices()
539538
$foo =$container->getDefinition('foo');
540539

541540
$fooFactory =$foo->getFactory();
542-
$this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition',$fooFactory[0]);
543-
$this->assertSame('FooFactory',$fooFactory[0]->getClass());
541+
$this->assertInstanceOf(Reference::class,$fooFactory[0]);
542+
$this->assertTrue($container->has((string)$fooFactory[0]));
543+
$fooFactoryDefinition =$container->getDefinition((string)$fooFactory[0]);
544+
$this->assertSame('FooFactory',$fooFactoryDefinition->getClass());
544545
$this->assertSame('createFoo',$fooFactory[1]);
545546

546-
$fooFactoryFactory =$fooFactory[0]->getFactory();
547-
$this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition',$fooFactoryFactory[0]);
548-
$this->assertSame('Foobar',$fooFactoryFactory[0]->getClass());
547+
$fooFactoryFactory =$fooFactoryDefinition->getFactory();
548+
$this->assertInstanceOf(Reference::class,$fooFactoryFactory[0]);
549+
$this->assertTrue($container->has((string)$fooFactoryFactory[0]));
550+
$this->assertSame('Foobar',$container->getDefinition((string)$fooFactoryFactory[0])->getClass());
549551
$this->assertSame('createFooFactory',$fooFactoryFactory[1]);
550552

551553
$fooConfigurator =$foo->getConfigurator();
552-
$this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition',$fooConfigurator[0]);
553-
$this->assertSame('Bar',$fooConfigurator[0]->getClass());
554+
$this->assertInstanceOf(Reference::class,$fooConfigurator[0]);
555+
$this->assertTrue($container->has((string)$fooConfigurator[0]));
556+
$fooConfiguratorDefinition =$container->getDefinition((string)$fooConfigurator[0]);
557+
$this->assertSame('Bar',$fooConfiguratorDefinition->getClass());
554558
$this->assertSame('configureFoo',$fooConfigurator[1]);
555559

556-
$barConfigurator =$fooConfigurator[0]->getConfigurator();
557-
$this->assertInstanceOf('Symfony\Component\DependencyInjection\Definition',$barConfigurator[0]);
558-
$this->assertSame('Baz',$barConfigurator[0]->getClass());
560+
$barConfigurator =$fooConfiguratorDefinition->getConfigurator();
561+
$this->assertInstanceOf(Reference::class,$barConfigurator[0]);
562+
$this->assertSame('Baz',$container->getDefinition((string)$barConfigurator[0])->getClass());
559563
$this->assertSame('configureBar',$barConfigurator[1]);
560564
}
561565

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp