Skip to content

Commit 33cc523

Browse files
author
Robin Chalas
committed
[DI] Register PSR4 prototypes as definitions
1 parent de5c60d commit 33cc523

File tree

4 files changed

+12
-5
lines changed

4 files changed

+12
-5
lines changed

src/Symfony/Component/DependencyInjection/Loader/FileLoader.php

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\DependencyInjection\Loader;
1313

14+
use Symfony\Component\DependencyInjection\Alias;
1415
use Symfony\Component\DependencyInjection\ChildDefinition;
1516
use Symfony\Component\DependencyInjection\ContainerBuilder;
1617
use Symfony\Component\DependencyInjection\Definition;
@@ -58,12 +59,14 @@ public function registerClasses(Definition $prototype, $namespace, $resource, $e
5859
throw new InvalidArgumentException(sprintf('Namespace is not a valid PSR-4 prefix: %s.', $namespace));
5960
}
6061

62+
$public = $prototype->isPublic();
6163
$classes = $this->findClasses($namespace, $resource, $exclude);
6264
// prepare for deep cloning
6365
$prototype = serialize($prototype);
6466

6567
foreach ($classes as $class) {
66-
$this->setDefinition($class, unserialize($prototype));
68+
$this->setDefinition("$class.prototype", unserialize($prototype)->setClass($class)->setPublic(false));
69+
$this->container->setAlias($class, new Alias("$class.prototype", $public));
6770
}
6871
}
6972

src/Symfony/Component/DependencyInjection/Tests/Loader/FileLoaderTest.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -88,9 +88,10 @@ public function testRegisterClasses()
8888
$loader->registerClasses(new Definition(), 'Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\\', 'Prototype/%sub_dir%/*');
8989

9090
$this->assertEquals(
91-
array('service_container', Bar::class),
91+
array('service_container', Bar::class.'.prototype'),
9292
array_keys($container->getDefinitions())
9393
);
94+
$this->assertSame(Bar::class.'.prototype', (string) $container->getAlias(Bar::class));
9495
}
9596

9697
public function testRegisterClassesWithExclude()

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -624,8 +624,9 @@ public function testPrototype()
624624

625625
$ids = array_keys($container->getDefinitions());
626626
sort($ids);
627-
$this->assertSame(array(Prototype\Foo::class, Prototype\Sub\Bar::class, 'service_container'), $ids);
628-
627+
$this->assertSame(array(Prototype\Foo::class.'.prototype', Prototype\Sub\Bar::class.'.prototype', 'service_container'), $ids);
628+
$this->assertSame(Prototype\Foo::class.'.prototype', (string) $container->getAlias(Prototype\Foo::class));
629+
$this->assertSame(Prototype\Sub\Bar::class.'.prototype', (string) $container->getAlias(Prototype\Sub\Bar::class));
629630
$resources = $container->getResources();
630631

631632
$fixturesDir = dirname(__DIR__).DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR;

src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php

+3-1
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,9 @@ public function testPrototype()
376376

377377
$ids = array_keys($container->getDefinitions());
378378
sort($ids);
379-
$this->assertSame(array(Prototype\Foo::class, Prototype\Sub\Bar::class, 'service_container'), $ids);
379+
$this->assertSame(array(Prototype\Foo::class.'.prototype', Prototype\Sub\Bar::class.'.prototype', 'service_container'), $ids);
380+
$this->assertSame(Prototype\Foo::class.'.prototype', (string) $container->getAlias(Prototype\Foo::class));
381+
$this->assertSame(Prototype\Sub\Bar::class.'.prototype', (string) $container->getAlias(Prototype\Sub\Bar::class));
380382

381383
$resources = $container->getResources();
382384

0 commit comments

Comments
 (0)