Skip to content

Commit e1e7440

Browse files
committed
[DependencyInjection] provide better error message when using deprecated configuration options
1 parent 7493c2b commit e1e7440

File tree

8 files changed

+34
-22
lines changed

8 files changed

+34
-22
lines changed

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

+16-6
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,11 @@ private function parseDefinitions(\DOMDocument $xml, $file)
126126
* Parses an individual Definition.
127127
*
128128
* @param \DOMElement $service
129+
* @param string $file
129130
*
130131
* @return Definition|null
131132
*/
132-
private function parseDefinition(\DOMElement $service)
133+
private function parseDefinition(\DOMElement $service, $file)
133134
{
134135
if ($alias = $service->getAttribute('alias')) {
135136
$public = true;
@@ -149,13 +150,22 @@ private function parseDefinition(\DOMElement $service)
149150

150151
foreach (array('class', 'scope', 'public', 'factory-class', 'factory-method', 'factory-service', 'synthetic', 'lazy', 'abstract') as $key) {
151152
if ($value = $service->getAttribute($key)) {
153+
if (in_array($key, array('factory-class', 'factory-method', 'factory-service'))) {
154+
trigger_error(sprintf('The "%s" attribute in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use the "factory" element instead.', $key, $file), E_USER_DEPRECATED);
155+
}
152156
$method = 'set'.str_replace('-', '', $key);
153157
$definition->$method(XmlUtils::phpize($value));
154158
}
155159
}
156160

157161
if ($value = $service->getAttribute('synchronized')) {
158-
$definition->setSynchronized(XmlUtils::phpize($value), 'request' !== (string) $service->getAttribute('id'));
162+
$triggerDeprecation = 'request' !== (string) $service->getAttribute('id');
163+
164+
if ($triggerDeprecation) {
165+
trigger_error(sprintf('The "synchronized" attribute in file "%s" is deprecated since version 2.7 and will be removed in 3.0.', $file), E_USER_DEPRECATED);
166+
}
167+
168+
$definition->setSynchronized(XmlUtils::phpize($value), $triggerDeprecation);
159169
}
160170

161171
if ($files = $this->getChildren($service, 'file')) {
@@ -173,7 +183,7 @@ private function parseDefinition(\DOMElement $service)
173183
$factoryService = $this->getChildren($factory, 'service');
174184

175185
if (isset($factoryService[0])) {
176-
$class = $this->parseDefinition($factoryService[0]);
186+
$class = $this->parseDefinition($factoryService[0], $file);
177187
} elseif ($childService = $factory->getAttribute('service')) {
178188
$class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
179189
} else {
@@ -192,7 +202,7 @@ private function parseDefinition(\DOMElement $service)
192202
$configuratorService = $this->getChildren($configurator, 'service');
193203

194204
if (isset($configuratorService[0])) {
195-
$class = $this->parseDefinition($configuratorService[0]);
205+
$class = $this->parseDefinition($configuratorService[0], $file);
196206
} elseif ($childService = $configurator->getAttribute('service')) {
197207
$class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
198208
} else {
@@ -233,7 +243,7 @@ private function parseDefinition(\DOMElement $service)
233243
}
234244

235245
/**
236-
* Parses a XML file to a \DOMDocument
246+
* Parses a XML file to a \DOMDocument.
237247
*
238248
* @param string $file Path to a file
239249
*
@@ -392,7 +402,7 @@ private function getArgumentsAsPhp(\DOMElement $node, $name, $lowercase = true)
392402
}
393403

394404
/**
395-
* Get child elements by name
405+
* Get child elements by name.
396406
*
397407
* @param \DOMNode $node
398408
* @param mixed $name

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

+4
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ private function parseDefinition($id, $service, $file)
172172
}
173173

174174
if (isset($service['synchronized'])) {
175+
trigger_error(sprintf('The "synchronized" key in file "%s" is deprecated since version 2.7 and will be removed in 3.0.', $file), E_USER_DEPRECATED);
175176
$definition->setSynchronized($service['synchronized'], 'request' !== $id);
176177
}
177178

@@ -201,14 +202,17 @@ private function parseDefinition($id, $service, $file)
201202
}
202203

203204
if (isset($service['factory_class'])) {
205+
trigger_error(sprintf('The "factory_class" key in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $file), E_USER_DEPRECATED);
204206
$definition->setFactoryClass($service['factory_class']);
205207
}
206208

207209
if (isset($service['factory_method'])) {
210+
trigger_error(sprintf('The "factory_method" key in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $file), E_USER_DEPRECATED);
208211
$definition->setFactoryMethod($service['factory_method']);
209212
}
210213

211214
if (isset($service['factory_service'])) {
215+
trigger_error(sprintf('The "factory_service" key in file "%s" is deprecated since version 2.6 and will be removed in 3.0. Use "factory" instead.', $file), E_USER_DEPRECATED);
212216
$definition->setFactoryService($service['factory_service']);
213217
}
214218

src/Symfony/Component/DependencyInjection/Tests/Fixtures/xml/legacy-services6.xml

+1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
<services>
77
<service id="constructor" class="FooClass" factory-method="getInstance" />
88
<service id="factory_service" factory-method="getInstance" factory-service="baz_factory" />
9+
<service id="request" class="Request" synthetic="true" synchronized="true" lazy="true"/>
910
</services>
1011
</container>

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

-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
</service>
4848
<service id="alias_for_foo" alias="foo" />
4949
<service id="another_alias_for_foo" alias="foo" public="false" />
50-
<service id="request" class="Request" synthetic="true" synchronized="true" lazy="true"/>
5150
<service id="decorator_service" decorates="decorated" />
5251
<service id="decorator_service_with_name" decorates="decorated" decoration-inner-name="decorated.pif-pouf"/>
5352
<service id="new_factory1" class="FooBarClass">
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
services:
22
constructor: { class: FooClass, factory_method: getInstance }
33
factory_service: { class: BazClass, factory_method: getInstance, factory_service: baz_factory }
4+
request:
5+
class: Request
6+
synthetic: true
7+
synchronized: true
8+
lazy: true

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

-5
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,6 @@ services:
2323
another_alias_for_foo:
2424
alias: foo
2525
public: false
26-
request:
27-
class: Request
28-
synthetic: true
29-
synchronized: true
30-
lazy: true
3126
decorator_service:
3227
decorates: decorated
3328
decorator_service_with_name:

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

+4-5
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,10 @@ public function testLegacyLoadServices()
206206
$this->assertNull($services['factory_service']->getClass());
207207
$this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
208208
$this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
209+
$this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
210+
$this->assertTrue($services['request']->isSynchronized(), '->load() parses the synchronized flag');
211+
$this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
212+
$this->assertNull($services['request']->getDecoratedService());
209213
}
210214

211215
public function testLoadServices()
@@ -231,10 +235,6 @@ public function testLoadServices()
231235
$this->assertEquals(array(new Reference('baz', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
232236
$this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
233237

234-
$this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
235-
$this->assertTrue($services['request']->isSynchronized(false), '->load() parses the synchronized flag');
236-
$this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
237-
238238
$aliases = $container->getAliases();
239239
$this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses <service> elements');
240240
$this->assertEquals('foo', (string) $aliases['alias_for_foo'], '->load() parses aliases');
@@ -243,7 +243,6 @@ public function testLoadServices()
243243
$this->assertEquals('foo', (string) $aliases['another_alias_for_foo']);
244244
$this->assertFalse($aliases['another_alias_for_foo']->isPublic());
245245

246-
$this->assertNull($services['request']->getDecoratedService());
247246
$this->assertEquals(array('decorated', null), $services['decorator_service']->getDecoratedService());
248247
$this->assertEquals(array('decorated', 'decorated.pif-pouf'), $services['decorator_service_with_name']->getDecoratedService());
249248
}

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

+4-5
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,10 @@ public function testLegacyLoadServices()
135135
$this->assertEquals('BazClass', $services['factory_service']->getClass());
136136
$this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
137137
$this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
138+
$this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
139+
$this->assertTrue($services['request']->isSynchronized(), '->load() parses the synchronized flag');
140+
$this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
141+
$this->assertNull($services['request']->getDecoratedService());
138142
}
139143

140144
public function testLoadServices()
@@ -160,10 +164,6 @@ public function testLoadServices()
160164
$this->assertEquals(array(new Reference('baz'), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
161165
$this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
162166

163-
$this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
164-
$this->assertTrue($services['request']->isSynchronized(false), '->load() parses the synchronized flag');
165-
$this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
166-
167167
$aliases = $container->getAliases();
168168
$this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses aliases');
169169
$this->assertEquals('foo', (string) $aliases['alias_for_foo'], '->load() parses aliases');
@@ -172,7 +172,6 @@ public function testLoadServices()
172172
$this->assertEquals('foo', (string) $aliases['another_alias_for_foo']);
173173
$this->assertFalse($aliases['another_alias_for_foo']->isPublic());
174174

175-
$this->assertNull($services['request']->getDecoratedService());
176175
$this->assertEquals(array('decorated', null), $services['decorator_service']->getDecoratedService());
177176
$this->assertEquals(array('decorated', 'decorated.pif-pouf'), $services['decorator_service_with_name']->getDecoratedService());
178177
}

0 commit comments

Comments
 (0)