Skip to content

Commit 4527e78

Browse files
bug #34729 [DI] auto-register singly implemented interfaces by default (nicolas-grekas)
This PR was merged into the 4.4 branch. Discussion ---------- [DI] auto-register singly implemented interfaces by default | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #34524 | License | MIT | Doc PR | - Commits ------- 209b330fd6 [DI] auto-register singly implemented interfaces by default
2 parents 373acf5 + a4b484b commit 4527e78

File tree

5 files changed

+14
-6
lines changed

5 files changed

+14
-6
lines changed

Loader/FileLoader.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ abstract class FileLoader extends BaseFileLoader
3636
protected $instanceof = [];
3737
protected $interfaces = [];
3838
protected $singlyImplemented = [];
39+
protected $autoRegisterAliasesForSinglyImplementedInterfaces = true;
3940

4041
public function __construct(ContainerBuilder $container, FileLocatorInterface $locator)
4142
{
@@ -116,6 +117,10 @@ public function registerClasses(Definition $prototype, $namespace, $resource, $e
116117
}
117118
}
118119
}
120+
121+
if ($this->autoRegisterAliasesForSinglyImplementedInterfaces) {
122+
$this->registerAliasesForSinglyImplementedInterfaces();
123+
}
119124
}
120125

121126
public function registerAliasesForSinglyImplementedInterfaces()

Loader/PhpFileLoader.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
*/
2424
class PhpFileLoader extends FileLoader
2525
{
26+
protected $autoRegisterAliasesForSinglyImplementedInterfaces = false;
27+
2628
/**
2729
* {@inheritdoc}
2830
*/

Loader/XmlFileLoader.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ class XmlFileLoader extends FileLoader
3636
{
3737
const NS = 'http://symfony.com/schema/dic/services';
3838

39+
protected $autoRegisterAliasesForSinglyImplementedInterfaces = false;
40+
3941
/**
4042
* {@inheritdoc}
4143
*/

Loader/YamlFileLoader.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ class YamlFileLoader extends FileLoader
110110
private $anonymousServicesCount;
111111
private $anonymousServicesSuffix;
112112

113+
protected $autoRegisterAliasesForSinglyImplementedInterfaces = false;
114+
113115
/**
114116
* {@inheritdoc}
115117
*/

Tests/Loader/FileLoaderTest.php

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ public function testRegisterClasses()
8989
$container = new ContainerBuilder();
9090
$container->setParameter('sub_dir', 'Sub');
9191
$loader = new TestFileLoader($container, new FileLocator(self::$fixturesPath.'/Fixtures'));
92+
$loader->autoRegisterAliasesForSinglyImplementedInterfaces = false;
9293

9394
$loader->registerClasses(new Definition(), 'Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\\', 'Prototype/%sub_dir%/*');
9495
$loader->registerClasses(new Definition(), 'Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\Sub\\', 'Prototype/%sub_dir%/*'); // loading twice should not be an issue
@@ -121,7 +122,6 @@ public function testRegisterClassesWithExclude()
121122
// load everything, except OtherDir/AnotherSub & Foo.php
122123
'Prototype/{%other_dir%/AnotherSub,Foo.php}'
123124
);
124-
$loader->registerAliasesForSinglyImplementedInterfaces();
125125

126126
$this->assertTrue($container->has(Bar::class));
127127
$this->assertTrue($container->has(Baz::class));
@@ -151,7 +151,6 @@ public function testRegisterClassesWithExcludeAsArray()
151151
'Prototype/OtherDir/AnotherSub/DeeperBaz.php',
152152
]
153153
);
154-
$loader->registerAliasesForSinglyImplementedInterfaces();
155154

156155
$this->assertTrue($container->has(Foo::class));
157156
$this->assertTrue($container->has(Baz::class));
@@ -167,7 +166,6 @@ public function testNestedRegisterClasses()
167166
$prototype = new Definition();
168167
$prototype->setPublic(true)->setPrivate(true);
169168
$loader->registerClasses($prototype, 'Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\\', 'Prototype/*');
170-
$loader->registerAliasesForSinglyImplementedInterfaces();
171169

172170
$this->assertTrue($container->has(Bar::class));
173171
$this->assertTrue($container->has(Baz::class));
@@ -199,7 +197,6 @@ public function testMissingParentClass()
199197
'Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\BadClasses\\',
200198
'Prototype/%bad_classes_dir%/*'
201199
);
202-
$loader->registerAliasesForSinglyImplementedInterfaces();
203200

204201
$this->assertTrue($container->has(MissingParent::class));
205202

@@ -218,7 +215,6 @@ public function testRegisterClassesWithBadPrefix()
218215

219216
// the Sub is missing from namespace prefix
220217
$loader->registerClasses(new Definition(), 'Symfony\Component\DependencyInjection\Tests\Fixtures\Prototype\\', 'Prototype/Sub/*');
221-
$loader->registerAliasesForSinglyImplementedInterfaces();
222218
}
223219

224220
public function testRegisterClassesWithIncompatibleExclude()
@@ -234,12 +230,13 @@ public function testRegisterClassesWithIncompatibleExclude()
234230
'Prototype/*',
235231
'yaml/*'
236232
);
237-
$loader->registerAliasesForSinglyImplementedInterfaces();
238233
}
239234
}
240235

241236
class TestFileLoader extends FileLoader
242237
{
238+
public $autoRegisterAliasesForSinglyImplementedInterfaces = true;
239+
243240
public function load($resource, $type = null)
244241
{
245242
return $resource;

0 commit comments

Comments
 (0)