Skip to content

Commit 460abf9

Browse files
Merge branch '6.2' into 6.3
* 6.2: Fix test provider [HttpClient] Fix global state preventing two CurlHttpClient instances from working together cs fix [Translation] Crowdin Bridge: Fix locale vs LanguageId [DependencyInjection] Fix support for inner collections when using `<bind>`
2 parents 234d598 + c36180b commit 460abf9

File tree

3 files changed

+116
-1
lines changed

3 files changed

+116
-1
lines changed

Loader/schema/dic/services/services-1.0.xsd

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@
280280

281281
<xsd:complexType name="bind" mixed="true">
282282
<xsd:choice maxOccurs="unbounded">
283-
<xsd:element name="bind" type="argument" minOccurs="0" maxOccurs="unbounded" />
283+
<xsd:element name="bind" type="bind_argument" minOccurs="0" maxOccurs="unbounded" />
284284
<xsd:element name="service" type="service" />
285285
</xsd:choice>
286286
<xsd:attribute name="type" type="argument_type" />
@@ -291,6 +291,24 @@
291291
<xsd:attribute name="tag" type="xsd:string" />
292292
</xsd:complexType>
293293

294+
<xsd:complexType name="bind_argument" mixed="true">
295+
<xsd:choice minOccurs="0">
296+
<xsd:element name="bind" type="bind_argument" maxOccurs="unbounded" />
297+
<xsd:element name="service" type="service" />
298+
<xsd:element name="exclude" type="xsd:string" maxOccurs="unbounded" />
299+
</xsd:choice>
300+
<xsd:attribute name="type" type="argument_type" />
301+
<xsd:attribute name="id" type="xsd:string" />
302+
<xsd:attribute name="key" type="xsd:string" />
303+
<xsd:attribute name="index" type="xsd:integer" />
304+
<xsd:attribute name="on-invalid" type="invalid_sequence" />
305+
<xsd:attribute name="tag" type="xsd:string" />
306+
<xsd:attribute name="index-by" type="xsd:string" />
307+
<xsd:attribute name="default-index-method" type="xsd:string" />
308+
<xsd:attribute name="default-priority-method" type="xsd:string" />
309+
<xsd:attribute name="exclude" type="xsd:string" />
310+
</xsd:complexType>
311+
294312
<xsd:complexType name="argument" mixed="true">
295313
<xsd:choice minOccurs="0">
296314
<xsd:element name="argument" type="argument" maxOccurs="unbounded" />
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<container xmlns="http://symfony.com/schema/dic/services" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
3+
<services>
4+
<service id="bar1" class="Symfony\Component\DependencyInjection\Tests\Fixtures\Bar" autowire="true">
5+
<bind key="$foo" type="collection">
6+
<bind>item.1</bind>
7+
<bind>item.2</bind>
8+
</bind>
9+
</service>
10+
<service id="bar2" class="Symfony\Component\DependencyInjection\Tests\Fixtures\Bar" autowire="true">
11+
<bind key="$foo" type="collection">
12+
<bind>item.1</bind>
13+
<bind>item.2</bind>
14+
</bind>
15+
</service>
16+
<service id="bar3" class="Symfony\Component\DependencyInjection\Tests\Fixtures\Bar" autowire="true">
17+
<bind key="$foo" type="collection">
18+
<bind>item.1</bind>
19+
<bind>item.2</bind>
20+
<bind>item.3</bind>
21+
<bind>item.4</bind>
22+
</bind>
23+
</service>
24+
<service id="bar4" class="Symfony\Component\DependencyInjection\Tests\Fixtures\Bar" autowire="true">
25+
<bind key="$foo" type="collection">
26+
<bind>item.1</bind>
27+
<bind>item.2</bind>
28+
<bind key="1">item.3</bind>
29+
<bind>item.4</bind>
30+
</bind>
31+
</service>
32+
<service id="bar5" class="Symfony\Component\DependencyInjection\Tests\Fixtures\Bar" autowire="true">
33+
<bind key="$foo" type="collection">
34+
<bind>item.1</bind>
35+
<bind>item.2</bind>
36+
<bind type="collection">
37+
<bind>item.3.1</bind>
38+
<bind>item.3.2</bind>
39+
</bind>
40+
</bind>
41+
</service>
42+
<service id="bar6" class="Symfony\Component\DependencyInjection\Tests\Fixtures\Bar" autowire="true">
43+
<bind key="$foo" type="collection">
44+
<bind>item.1</bind>
45+
<bind type="collection">
46+
<bind>item.2.1</bind>
47+
<bind>item.2.2</bind>
48+
</bind>
49+
<bind>item.3</bind>
50+
</bind>
51+
</service>
52+
<service id="bar7" class="Symfony\Component\DependencyInjection\Tests\Fixtures\Bar" autowire="true">
53+
<bind key="$foo" type="iterator">
54+
<bind>item.1</bind>
55+
<bind>item.2</bind>
56+
</bind>
57+
</service>
58+
<service id="bar8" class="Symfony\Component\DependencyInjection\Tests\Fixtures\Bar" autowire="true">
59+
<bind key="$foo" type="iterator">
60+
<bind>item.1</bind>
61+
<bind>item.2</bind>
62+
<bind type="collection">
63+
<bind>item.3.1</bind>
64+
<bind>item.3.2</bind>
65+
</bind>
66+
</bind>
67+
</service>
68+
</services>
69+
</container>

Tests/Loader/XmlFileLoaderTest.php

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,6 +1197,34 @@ public function testClosure()
11971197
$this->assertEquals((new Definition('Closure'))->setFactory(['Closure', 'fromCallable'])->addArgument(new Reference('bar')), $definition);
11981198
}
11991199

1200+
/**
1201+
* @dataProvider dataForBindingsAndInnerCollections
1202+
*/
1203+
public function testBindingsAndInnerCollections($bindName, $expected)
1204+
{
1205+
$container = new ContainerBuilder();
1206+
$loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'));
1207+
$loader->load('bindings_and_inner_collections.xml');
1208+
(new ResolveBindingsPass())->process($container);
1209+
$definition = $container->getDefinition($bindName);
1210+
$actual = $definition->getBindings()['$foo']->getValues()[0];
1211+
$this->assertEquals($actual, $expected);
1212+
}
1213+
1214+
public static function dataForBindingsAndInnerCollections()
1215+
{
1216+
return [
1217+
['bar1', ['item.1', 'item.2']],
1218+
['bar2', ['item.1', 'item.2']],
1219+
['bar3', ['item.1', 'item.2', 'item.3', 'item.4']],
1220+
['bar4', ['item.1', 'item.3', 'item.4']],
1221+
['bar5', ['item.1', 'item.2', ['item.3.1', 'item.3.2']]],
1222+
['bar6', ['item.1', ['item.2.1', 'item.2.2'], 'item.3']],
1223+
['bar7', new IteratorArgument(['item.1', 'item.2'])],
1224+
['bar8', new IteratorArgument(['item.1', 'item.2', ['item.3.1', 'item.3.2']])],
1225+
];
1226+
}
1227+
12001228
public function testFromCallable()
12011229
{
12021230
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)