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

Appearance settings

Commit e0bd1ca

Browse filesBrowse 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 e0bd1ca
Copy full SHA for e0bd1ca

File tree

8 files changed

+24
-26
lines changed
Filter options

8 files changed

+24
-26
lines changed

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Loader/XmlFileLoader.php
+1-8Lines 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 (XmlUtils::phpize($value)) {
307+
if (!empty($defaults['tags'])) {
315308
$tags = array_merge($tags, $defaults['tags']);
316309
}
317310

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

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Loader/YamlFileLoader.php
+1-8Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php
+12-1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/services29.xml
+1-1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services28.yml
-1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/yaml/services_defaults_instanceof_parent.yml
+1Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Loader/XmlFileLoaderTest.php
+3-3Lines 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

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Loader/YamlFileLoaderTest.php
+5-4Lines 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)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.