Skip to content

Commit ad4c497

Browse files
nusje2000nicolas-grekas
authored andcommitted
[DependencyInjection] Removed unsetting of environment property in loaders
1 parent 1b603d8 commit ad4c497

File tree

8 files changed

+176
-16
lines changed

8 files changed

+176
-16
lines changed

Loader/XmlFileLoader.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,19 @@ public function load($resource, string $type = null)
5151

5252
$this->container->fileExists($path);
5353

54-
$env = $this->env;
55-
$this->env = null;
56-
try {
57-
$this->loadXml($xml, $path);
58-
} finally {
59-
$this->env = $env;
60-
}
54+
$this->loadXml($xml, $path);
6155

6256
if ($this->env) {
6357
$xpath = new \DOMXPath($xml);
6458
$xpath->registerNamespace('container', self::NS);
6559
foreach ($xpath->query(sprintf('//container:when[@env="%s"]', $this->env)) ?: [] as $root) {
66-
$this->loadXml($xml, $path, $root);
60+
$env = $this->env;
61+
$this->env = null;
62+
try {
63+
$this->loadXml($xml, $path, $root);
64+
} finally {
65+
$this->env = $env;
66+
}
6767
}
6868
}
6969
}

Loader/YamlFileLoader.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -130,21 +130,21 @@ public function load($resource, string $type = null)
130130
return;
131131
}
132132

133-
$env = $this->env;
134-
$this->env = null;
135-
try {
136-
$this->loadContent($content, $path);
137-
} finally {
138-
$this->env = $env;
139-
}
133+
$this->loadContent($content, $path);
140134

141135
// per-env configuration
142136
if ($this->env && isset($content['when@'.$this->env])) {
143137
if (!\is_array($content['when@'.$this->env])) {
144138
throw new InvalidArgumentException(sprintf('The "when@%s" key should contain an array in "%s". Check your YAML syntax.', $this->env, $path));
145139
}
146140

147-
$this->loadContent($content['when@'.$this->env], $path);
141+
$env = $this->env;
142+
$this->env = null;
143+
try {
144+
$this->loadContent($content['when@'.$env], $path);
145+
} finally {
146+
$this->env = $env;
147+
}
148148
}
149149
}
150150

Tests/Fixtures/xml/services29.xml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?xml version="1.0" ?>
2+
3+
<container xmlns="http://symfony.com/schema/dic/services"
4+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5+
xsi:schemaLocation="http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd">
6+
<imports>
7+
<import resource="services30.xml"/>
8+
</imports>
9+
10+
<parameters>
11+
<parameter key="root_parameter">default value</parameter>
12+
</parameters>
13+
14+
<when env="dev">
15+
<parameters>
16+
<parameter key="root_parameter">value when on dev</parameter>
17+
</parameters>
18+
</when>
19+
20+
<when env="test">
21+
<parameters>
22+
<parameter key="root_parameter">value when on test</parameter>
23+
</parameters>
24+
</when>
25+
26+
<when env="prod">
27+
<parameters>
28+
<parameter key="root_parameter">value when on prod</parameter>
29+
</parameters>
30+
</when>
31+
</container>

Tests/Fixtures/xml/services30.xml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
<parameters>
4+
<parameter key="imported_parameter">default value</parameter>
5+
</parameters>
6+
7+
<when env="dev">
8+
<parameters>
9+
<parameter key="imported_parameter">value when on dev</parameter>
10+
</parameters>
11+
</when>
12+
13+
<when env="test">
14+
<parameters>
15+
<parameter key="imported_parameter">value when on test</parameter>
16+
</parameters>
17+
</when>
18+
19+
<when env="prod">
20+
<parameters>
21+
<parameter key="imported_parameter">value when on prod</parameter>
22+
</parameters>
23+
</when>
24+
</container>

Tests/Fixtures/yaml/services29.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
imports:
2+
- { resource: services30.yml }
3+
4+
parameters:
5+
root_parameter: 'default value'
6+
7+
when@dev:
8+
parameters:
9+
root_parameter: 'value when on dev'
10+
11+
when@test:
12+
parameters:
13+
root_parameter: 'value when on test'
14+
15+
when@prod:
16+
parameters:
17+
root_parameter: 'value when on prod'

Tests/Fixtures/yaml/services30.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
parameters:
2+
imported_parameter: 'default value'
3+
4+
when@dev:
5+
parameters:
6+
imported_parameter: 'value when on dev'
7+
8+
when@test:
9+
parameters:
10+
imported_parameter: 'value when on test'
11+
12+
when@prod:
13+
parameters:
14+
imported_parameter: 'value when on prod'

Tests/Loader/XmlFileLoaderTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,43 @@ public function testLoadImports()
231231
}
232232
}
233233

234+
public function testLoadWithEnvironment()
235+
{
236+
$container = new ContainerBuilder();
237+
238+
$loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'), 'dev');
239+
$loader->load('services29.xml');
240+
241+
self::assertSame([
242+
'imported_parameter' => 'value when on dev',
243+
'root_parameter' => 'value when on dev',
244+
], $container->getParameterBag()->all());
245+
246+
$loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'), 'test');
247+
$loader->load('services29.xml');
248+
249+
self::assertSame([
250+
'imported_parameter' => 'value when on test',
251+
'root_parameter' => 'value when on test',
252+
], $container->getParameterBag()->all());
253+
254+
$loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'), 'prod');
255+
$loader->load('services29.xml');
256+
257+
self::assertSame([
258+
'imported_parameter' => 'value when on prod',
259+
'root_parameter' => 'value when on prod',
260+
], $container->getParameterBag()->all());
261+
262+
$loader = new XmlFileLoader($container, new FileLocator(self::$fixturesPath.'/xml'), 'other');
263+
$loader->load('services29.xml');
264+
265+
self::assertSame([
266+
'imported_parameter' => 'default value',
267+
'root_parameter' => 'default value',
268+
], $container->getParameterBag()->all());
269+
}
270+
234271
public function testLoadAnonymousServices()
235272
{
236273
$container = new ContainerBuilder();

Tests/Loader/YamlFileLoaderTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,43 @@ public function testLoadImports()
172172
}
173173
}
174174

175+
public function testLoadWithEnvironment()
176+
{
177+
$container = new ContainerBuilder();
178+
179+
$loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'), 'dev');
180+
$loader->load('services29.yml');
181+
182+
self::assertSame([
183+
'imported_parameter' => 'value when on dev',
184+
'root_parameter' => 'value when on dev',
185+
], $container->getParameterBag()->all());
186+
187+
$loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'), 'test');
188+
$loader->load('services29.yml');
189+
190+
self::assertSame([
191+
'imported_parameter' => 'value when on test',
192+
'root_parameter' => 'value when on test',
193+
], $container->getParameterBag()->all());
194+
195+
$loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'), 'prod');
196+
$loader->load('services29.yml');
197+
198+
self::assertSame([
199+
'imported_parameter' => 'value when on prod',
200+
'root_parameter' => 'value when on prod',
201+
], $container->getParameterBag()->all());
202+
203+
$loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'), 'other');
204+
$loader->load('services29.yml');
205+
206+
self::assertSame([
207+
'imported_parameter' => 'default value',
208+
'root_parameter' => 'default value',
209+
], $container->getParameterBag()->all());
210+
}
211+
175212
public function testLoadServices()
176213
{
177214
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)