8000 Making tags under _defaults always apply · symfony/symfony@d74da57 · GitHub
[go: up one dir, main page]

Skip to content

Commit d74da57

Browse files
committed
Making tags under _defaults always apply
_defaults also apply to child definitions with a parent - they should. When the parent and child are in the same file, this causes the final service to have 2 versions of the tag. But that's what the user configured. But, for example, if the parent service is defined in a *different* file, then now, they child will properly have the tag from _defaults
1 parent 8701cae commit d74da57

File tree

8 files changed

+24
-26
lines changed

8 files changed

+24
-26
lines changed

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,6 @@ private function parseDefinition(\DOMElement $service, $file, array $defaults =
222222
} elseif (isset($defaults['inherit-tags'])) {
223223
$definition->setInheritTags($defaults['inherit-tags']);
224224
}
225-
$defaults = array();
226225
} else {
227226
$definition = new Definition();
228227

@@ -305,13 +304,7 @@ private function parseDefinition(\DOMElement $service, $file, array $defaults =
305304

306305
$tags = $this->getChildren($service, 'tag');
307306

308-
if (empty($defaults['tags'])) {
309-
// no-op
310-
} elseif (!$value = $service->getAttribute('inherit-tags')) {
311-
if (!$tags) {
312-
$tags = $defaults['tags'];
313-
}
314-
} elseif (XmlUti 10000 ls::phpize($value)) {
307+
if (!empty($defaults['tags'])) {
315308
$tags = array_merge($tags, $defaults['tags']);
316309
}
317310

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

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,6 @@ private function parseDefinition($id, $service, $file, array $defaults)
363363
if (null !== $inheritTag) {
364364
$definition->setInheritTags($inheritTag);
365365
}
366-
$defaults = array();
367366
} else {
368367
$definition = new Definition();
369368

@@ -451,13 +450,7 @@ private function parseDefinition($id, $service, $file, array $defaults)
451450
throw new InvalidArgumentException(sprintf('Parameter "tags" must be an array for service "%s" in %s. Check your YAML syntax.', $id, $file));
452451
}
453452

454-
if (!isset($defaults['tags'])) {
455-
// no-op
456-
} elseif (!isset($service['inherit_tags'])) {
457-
if (!isset($service['tags'])) {
458-
$tags = $defaults['tags'];
459-
}
460-
} elseif ($service['inherit_tags']) {
453+
if (isset($defaults['tags'])) {
461454
$tags = array_merge($tags, $defaults['tags']);
462455
}
463456

src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ public function testInstanceofDefaultsAndParentDefinitionResolution()
138138
array(
139139
'foo_tag' => array(array('tag_option' => 'from_service'), array('tag_option' => 'from_instanceof')),
140140
'bar_tag' => array(array()),
141+
'tag_from_defaults' => array(array())
141142
),
142143
$simpleService->getTags()
143144
);
@@ -161,7 +162,14 @@ public function testInstanceofDefaultsAndParentDefinitionResolution()
161162

162163
// children definitions get no instanceof
163164
$childDef = $container->getDefinition('child_service');
164-
$this->assertEmpty($childDef->getTags());
165+
// _defaults tag from child is applied, but not parent
166+
// since there is no inherit_tags
167+
$this->assertEquals(
168+
array(
169+
'tag_from_defaults' => array(array())
170+
),
171+
$childDef->getTags()
172+
);
165173

166174
$childDef2 = $container->getDefinition('child_service_with_parent_instanceof');
167175
// taken from instanceof applied to parent
@@ -173,6 +181,9 @@ public function testInstanceofDefaultsAndParentDefinitionResolution()
173181
array(
174182
'foo_tag' => array(array('tag_option' => 'from_child_def'), array('tag_option' => 'from_parent_def'), array('tag_option' => 'from_instanceof')),
175183
'bar_tag' => array(array()),
184+
// 2 versions of this tag, from child and parent
185+
// thanks to inherit_tags
186+
'tag_from_defaults' => array(array(), array())
176187
),
177188
$childDef2->getTags()
178189
);

src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services29.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
</defaults>
77

88
<service id="with_defaults" class="Foo" />
9-
<service id="no_defaults" class="Foo" public="true" autowire="false" inherit-tags="false">
9+
<service id="no_defaults" class="Foo" public="true" autowire="false">
1010
</service>
1111
<service id="no_defaults_child" class="Foo" parent="no_defaults">
1212
<tag name="bar" />

src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services28.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ services:
1414
class: Foo
1515
public: true
1616
autowire: ~
17-
inherit_tags: false
1817

1918
no_defaults:
2019
class: Foo

src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_defaults_instanceof_parent.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ services:
22
_defaults:
33
autowire: true
44
autoconfigure: true
5+
tags: [tag_from_defaults]
56

67
_instanceof:
78
Symfony\Component\DependencyInjection\Tests\Compiler\IntegrationTestStubParent:

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -659,9 +659,9 @@ public function testDefaults()
659659
$this->assertTrue($container->getDefinition('no_defaults')->isPublic());
660660
$this->assertTrue($container->getDefinition('no_defaults_child')->isPublic());
661661

662-
$this->assertSame(array(), $container->getDefinition('no_defaults')->getTags());
663-
$this->assertSame(array('bar' => array(array())), $container->getDefinition('no_defaults_child')->getTags());
664-
$this->assertSame(array('baz' => array(array()), 'foo' => array(array())), $container->getDefinition('with_defaults_child')->getTags());
662+
$this->assertSame(array('foo' => array(array())), $container->getDefinition('no_defaults')->getTags());
663+
$this->assertSame(array('bar' => array(array()), 'foo' => array(array())), $container->getDefinition('no_defaults_child')->getTags());
664+
$this->assertSame(array('baz' => array(array()), 'foo' => array(array(), array())), $container->getDefinition('with_defaults_child')->getTags());
665665

666666
$this->assertFalse($container->getDefinition('no_defaults')->isAutowired());
667667
$this->assertFalse($container->getDefinition('no_defaults_child')->isAutowired());

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -416,10 +416,11 @@ public function testDefaults()
416416
$this->assertTrue($container->getDefinition('no_defaults')->isPublic());
417417
$this->assertTrue($container->getDefinition('no_defaults_child')->isPublic());
418418

419-
$this->assertSame(array(), $container->getDefinition('with_null')->getTags());
420-
$this->assertSame(array(), $container->getDefinition('no_defaults')->getTags());
421-
$this->assertSame(array('bar' => array(array())), $container->getDefinition('no_defaults_child')->getTags());
422-
$this->assertSame(array('baz' => array(array()), 'foo' => array(array())), $container->getDefinition('with_defaults_child')->getTags());
419+
// foo tag is inherited from defaults
420+
$this->assertSame(array('foo' => array(array())), $container->getDefinition('with_null')->getTags());
421+
$this->assertSame(array('foo' => array(array())), $container->getDefinition('no_defaults')->getTags());
422+
$this->assertSame(array('bar' => array(array()), 'foo' => array(array())), $container->getDefinition('no_defaults_child')->getTags());
423+
$this->assertSame(array('baz' => array(array()), 'foo' => array(array(), array())), $container->getDefinition('with_defaults_child')->getTags());
423424

424425
$this->assertTrue($container->getDefinition('with_null')->isAutowired());
425426
$this->assertFalse($container->getDefinition('no_defaults')->isAutowired());

0 commit comments

Comments
 (0)
0