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

Commitddf1359

Browse files
committed
[DependencyInjection] Allow disabling instanceof config inheritance
1 parentc85a696 commitddf1359

File tree

34 files changed

+322
-5
lines changed

34 files changed

+322
-5
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <fabien@symfony.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespaceSymfony\Component\DependencyInjection\Attribute;
13+
14+
#[\Attribute(\Attribute::TARGET_CLASS)]
15+
finalclass WithoutInheritedConfiguration
16+
{
17+
}

‎src/Symfony/Component/DependencyInjection/CHANGELOG.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ CHANGELOG
77
* Allow`#[AsAlias]` to be extended
88
* Add argument`$target` to`ContainerBuilder::registerAliasForArgument()`
99
* Deprecate registering a service without a class when its id is a non-existing FQCN
10+
* Allow disabling instanceof configuration inheritance
1011

1112
7.3
1213
---

‎src/Symfony/Component/DependencyInjection/Compiler/ResolveInstanceofConditionalsPass.php‎

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespaceSymfony\Component\DependencyInjection\Compiler;
1313

14+
useSymfony\Component\DependencyInjection\Attribute\WithoutInheritedConfiguration;
1415
useSymfony\Component\DependencyInjection\ChildDefinition;
1516
useSymfony\Component\DependencyInjection\ContainerBuilder;
1617
useSymfony\Component\DependencyInjection\Definition;
@@ -59,22 +60,35 @@ private function processDefinition(ContainerBuilder $container, string $id, Defi
5960
return$definition;
6061
}
6162

63+
if (
64+
($reflectionClass =$container->getReflectionClass($class,false) ?:false)
65+
&&$definition->isAutoconfigured()
66+
&&$reflectionClass->getAttributes(WithoutInheritedConfiguration::class)
67+
) {
68+
$definition->setInheritConfiguration(false);
69+
}
70+
6271
$conditionals =$this->mergeConditionals($autoconfiguredInstanceof,$instanceofConditionals,$container);
6372

6473
$definition->setInstanceofConditionals([]);
6574
$shared =null;
6675
$instanceofTags = [];
6776
$instanceofCalls = [];
6877
$instanceofBindings = [];
69-
$reflectionClass =null;
7078
$parent =$definitioninstanceof ChildDefinition ?$definition->getParent() :null;
7179

7280
foreach ($conditionalsas$interface =>$instanceofDefs) {
73-
if ($interface !==$class && !($reflectionClass ??=$container->getReflectionClass($class,false) ?:false)) {
81+
if ($interface !==$class && !$reflectionClass) {
7482
continue;
7583
}
7684

77-
if ($interface !==$class && !is_subclass_of($class,$interface)) {
85+
if (
86+
$interface !==$class
87+
&& (
88+
!$definition->shouldInheritConfiguration()
89+
|| !is_subclass_of($class,$interface)
90+
)
91+
) {
7892
continue;
7993
}
8094

‎src/Symfony/Component/DependencyInjection/Definition.php‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class Definition
3333
privatearray$calls = [];
3434
privatearray$instanceof = [];
3535
privatebool$autoconfigured =false;
36+
privatebool$inheritConfiguration =true;
3637
privatestring|array|null$configurator =null;
3738
privatearray$tags = [];
3839
privatebool$public =false;
@@ -415,6 +416,25 @@ public function isAutoconfigured(): bool
415416
return$this->autoconfigured;
416417
}
417418

419+
/**
420+
* Sets whether instanceof conditionals should be applied to the current definition.
421+
*
422+
* @return $this
423+
*/
424+
publicfunctionsetInheritConfiguration(bool$inheritConfiguration):static
425+
{
426+
$this->changes['inheritConfiguration'] =true;
427+
428+
$this->inheritConfiguration =$inheritConfiguration;
429+
430+
return$this;
431+
}
432+
433+
publicfunctionshouldInheritConfiguration():bool
434+
{
435+
return$this->inheritConfiguration;
436+
}
437+
418438
/**
419439
* Sets tags for this definition.
420440
*

‎src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,10 @@ private function addService(Definition $definition, ?string $id): iterable
212212
$xmlAttr .=' autoconfigure="true"';
213213
}
214214

215+
if (!$definition->shouldInheritConfiguration()) {
216+
$xmlAttr .=' inherit-configuration="false"';
217+
}
218+
215219
if ($definition->isAbstract()) {
216220
$xmlAttr .=' abstract="true"';
217221
}

‎src/Symfony/Component/DependencyInjection/Dumper/YamlDumper.php‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,10 @@ private function addService(string $id, Definition $definition): string
111111
$code .=" autoconfigure: true\n";
112112
}
113113

114+
if (!$definition->shouldInheritConfiguration()) {
115+
$code .=" inherit_configuration: false\n";
116+
}
117+
114118
if ($definition->isAbstract()) {
115119
$code .=" abstract: true\n";
116120
}

‎src/Symfony/Component/DependencyInjection/Loader/Configurator/DefaultsConfigurator.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class DefaultsConfigurator extends AbstractServiceConfigurator
2222
useTraits\AutoconfigureTrait;
2323
useTraits\AutowireTrait;
2424
useTraits\BindTrait;
25+
useTraits\InheritConfigurationTrait;
2526
useTraits\PublicTrait;
2627

2728
publicconstFACTORY ='defaults';

‎src/Symfony/Component/DependencyInjection/Loader/Configurator/FromCallableConfigurator.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class FromCallableConfigurator extends AbstractServiceConfigurator
2424
useTraits\BindTrait;
2525
useTraits\DecorateTrait;
2626
useTraits\DeprecateTrait;
27+
useTraits\InheritConfigurationTrait;
2728
useTraits\LazyTrait;
2829
useTraits\PublicTrait;
2930
useTraits\ShareTrait;

‎src/Symfony/Component/DependencyInjection/Loader/Configurator/PrototypeConfigurator.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class PrototypeConfigurator extends AbstractServiceConfigurator
2929
useTraits\ConstructorTrait;
3030
useTraits\DeprecateTrait;
3131
useTraits\FactoryTrait;
32+
useTraits\InheritConfigurationTrait;
3233
useTraits\LazyTrait;
3334
useTraits\ParentTrait;
3435
useTraits\PropertyTrait;

‎src/Symfony/Component/DependencyInjection/Loader/Configurator/ServiceConfigurator.php‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class ServiceConfigurator extends AbstractServiceConfigurator
3333
useTraits\FactoryTrait;
3434
useTraits\FileTrait;
3535
useTraits\FromCallableTrait;
36+
useTraits\InheritConfigurationTrait;
3637
useTraits\LazyTrait;
3738
useTraits\ParentTrait;
3839
useTraits\PropertyTrait;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp