[DependencyInjection] provide better error message when using deprecated configuration options
This commit is contained in:
parent
7493c2bef5
commit
e1e74404a0
@ -126,10 +126,11 @@ class XmlFileLoader extends FileLoader
|
|||||||
* Parses an individual Definition.
|
* Parses an individual Definition.
|
||||||
*
|
*
|
||||||
* @param \DOMElement $service
|
* @param \DOMElement $service
|
||||||
|
* @param string $file
|
||||||
*
|
*
|
||||||
* @return Definition|null
|
* @return Definition|null
|
||||||
*/
|
*/
|
||||||
private function parseDefinition(\DOMElement $service)
|
private function parseDefinition(\DOMElement $service, $file)
|
||||||
{
|
{
|
||||||
if ($alias = $service->getAttribute('alias')) {
|
if ($alias = $service->getAttribute('alias')) {
|
||||||
$public = true;
|
$public = true;
|
||||||
@ -149,13 +150,22 @@ class XmlFileLoader extends FileLoader
|
|||||||
|
|
||||||
foreach (array('class', 'scope', 'public', 'factory-class', 'factory-method', 'factory-service', 'synthetic', 'lazy', 'abstract') as $key) {
|
foreach (array('class', 'scope', 'public', 'factory-class', 'factory-method', 'factory-service', 'synthetic', 'lazy', 'abstract') as $key) {
|
||||||
if ($value = $service->getAttribute($key)) {
|
if ($value = $service->getAttribute($key)) {
|
||||||
|
if (in_array($key, array('factory-class', 'factory-method', 'factory-service'))) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
$method = 'set'.str_replace('-', '', $key);
|
$method = 'set'.str_replace('-', '', $key);
|
||||||
$definition->$method(XmlUtils::phpize($value));
|
$definition->$method(XmlUtils::phpize($value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($value = $service->getAttribute('synchronized')) {
|
if ($value = $service->getAttribute('synchronized')) {
|
||||||
$definition->setSynchronized(XmlUtils::phpize($value), 'request' !== (string) $service->getAttribute('id'));
|
$triggerDeprecation = 'request' !== (string) $service->getAttribute('id');
|
||||||
|
|
||||||
|
if ($triggerDeprecation) {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
$definition->setSynchronized(XmlUtils::phpize($value), $triggerDeprecation);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($files = $this->getChildren($service, 'file')) {
|
if ($files = $this->getChildren($service, 'file')) {
|
||||||
@ -173,7 +183,7 @@ class XmlFileLoader extends FileLoader
|
|||||||
$factoryService = $this->getChildren($factory, 'service');
|
$factoryService = $this->getChildren($factory, 'service');
|
||||||
|
|
||||||
if (isset($factoryService[0])) {
|
if (isset($factoryService[0])) {
|
||||||
$class = $this->parseDefinition($factoryService[0]);
|
$class = $this->parseDefinition($factoryService[0], $file);
|
||||||
} elseif ($childService = $factory->getAttribute('service')) {
|
} elseif ($childService = $factory->getAttribute('service')) {
|
||||||
$class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
|
$class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
|
||||||
} else {
|
} else {
|
||||||
@ -192,7 +202,7 @@ class XmlFileLoader extends FileLoader
|
|||||||
$configuratorService = $this->getChildren($configurator, 'service');
|
$configuratorService = $this->getChildren($configurator, 'service');
|
||||||
|
|
||||||
if (isset($configuratorService[0])) {
|
if (isset($configuratorService[0])) {
|
||||||
$class = $this->parseDefinition($configuratorService[0]);
|
$class = $this->parseDefinition($configuratorService[0], $file);
|
||||||
} elseif ($childService = $configurator->getAttribute('service')) {
|
} elseif ($childService = $configurator->getAttribute('service')) {
|
||||||
$class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
|
$class = new Reference($childService, ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false);
|
||||||
} else {
|
} else {
|
||||||
@ -233,7 +243,7 @@ class XmlFileLoader extends FileLoader
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses a XML file to a \DOMDocument
|
* Parses a XML file to a \DOMDocument.
|
||||||
*
|
*
|
||||||
* @param string $file Path to a file
|
* @param string $file Path to a file
|
||||||
*
|
*
|
||||||
@ -392,7 +402,7 @@ class XmlFileLoader extends FileLoader
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get child elements by name
|
* Get child elements by name.
|
||||||
*
|
*
|
||||||
* @param \DOMNode $node
|
* @param \DOMNode $node
|
||||||
* @param mixed $name
|
* @param mixed $name
|
||||||
|
@ -172,6 +172,7 @@ class YamlFileLoader extends FileLoader
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isset($service['synchronized'])) {
|
if (isset($service['synchronized'])) {
|
||||||
|
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);
|
||||||
$definition->setSynchronized($service['synchronized'], 'request' !== $id);
|
$definition->setSynchronized($service['synchronized'], 'request' !== $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,14 +202,17 @@ class YamlFileLoader extends FileLoader
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isset($service['factory_class'])) {
|
if (isset($service['factory_class'])) {
|
||||||
|
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);
|
||||||
$definition->setFactoryClass($service['factory_class']);
|
$definition->setFactoryClass($service['factory_class']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($service['factory_method'])) {
|
if (isset($service['factory_method'])) {
|
||||||
|
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);
|
||||||
$definition->setFactoryMethod($service['factory_method']);
|
$definition->setFactoryMethod($service['factory_method']);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($service['factory_service'])) {
|
if (isset($service['factory_service'])) {
|
||||||
|
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);
|
||||||
$definition->setFactoryService($service['factory_service']);
|
$definition->setFactoryService($service['factory_service']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,5 +6,6 @@
|
|||||||
<services>
|
<services>
|
||||||
<service id="constructor" class="FooClass" factory-method="getInstance" />
|
<service id="constructor" class="FooClass" factory-method="getInstance" />
|
||||||
<service id="factory_service" factory-method="getInstance" factory-service="baz_factory" />
|
<service id="factory_service" factory-method="getInstance" factory-service="baz_factory" />
|
||||||
|
<service id="request" class="Request" synthetic="true" synchronized="true" lazy="true"/>
|
||||||
</services>
|
</services>
|
||||||
</container>
|
</container>
|
||||||
|
@ -47,7 +47,6 @@
|
|||||||
</service>
|
</service>
|
||||||
<service id="alias_for_foo" alias="foo" />
|
<service id="alias_for_foo" alias="foo" />
|
||||||
<service id="another_alias_for_foo" alias="foo" public="false" />
|
<service id="another_alias_for_foo" alias="foo" public="false" />
|
||||||
<service id="request" class="Request" synthetic="true" synchronized="true" lazy="true"/>
|
|
||||||
<service id="decorator_service" decorates="decorated" />
|
<service id="decorator_service" decorates="decorated" />
|
||||||
<service id="decorator_service_with_name" decorates="decorated" decoration-inner-name="decorated.pif-pouf"/>
|
<service id="decorator_service_with_name" decorates="decorated" decoration-inner-name="decorated.pif-pouf"/>
|
||||||
<service id="new_factory1" class="FooBarClass">
|
<service id="new_factory1" class="FooBarClass">
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
services:
|
services:
|
||||||
constructor: { class: FooClass, factory_method: getInstance }
|
constructor: { class: FooClass, factory_method: getInstance }
|
||||||
factory_service: { class: BazClass, factory_method: getInstance, factory_service: baz_factory }
|
factory_service: { class: BazClass, factory_method: getInstance, factory_service: baz_factory }
|
||||||
|
request:
|
||||||
|
class: Request
|
||||||
|
synthetic: true
|
||||||
|
synchronized: true
|
||||||
|
lazy: true
|
||||||
|
@ -23,11 +23,6 @@ services:
|
|||||||
another_alias_for_foo:
|
another_alias_for_foo:
|
||||||
alias: foo
|
alias: foo
|
||||||
public: false
|
public: false
|
||||||
request:
|
|
||||||
class: Request
|
|
||||||
synthetic: true
|
|
||||||
synchronized: true
|
|
||||||
lazy: true
|
|
||||||
decorator_service:
|
decorator_service:
|
||||||
decorates: decorated
|
decorates: decorated
|
||||||
decorator_service_with_name:
|
decorator_service_with_name:
|
||||||
|
@ -206,6 +206,10 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertNull($services['factory_service']->getClass());
|
$this->assertNull($services['factory_service']->getClass());
|
||||||
$this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
|
$this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
|
||||||
$this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
|
$this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
|
||||||
|
$this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
|
||||||
|
$this->assertTrue($services['request']->isSynchronized(), '->load() parses the synchronized flag');
|
||||||
|
$this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
|
||||||
|
$this->assertNull($services['request']->getDecoratedService());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testLoadServices()
|
public function testLoadServices()
|
||||||
@ -231,10 +235,6 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals(array(new Reference('baz', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
|
$this->assertEquals(array(new Reference('baz', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE, false), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
|
||||||
$this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
|
$this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
|
||||||
|
|
||||||
$this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
|
|
||||||
$this->assertTrue($services['request']->isSynchronized(false), '->load() parses the synchronized flag');
|
|
||||||
$this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
|
|
||||||
|
|
||||||
$aliases = $container->getAliases();
|
$aliases = $container->getAliases();
|
||||||
$this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses <service> elements');
|
$this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses <service> elements');
|
||||||
$this->assertEquals('foo', (string) $aliases['alias_for_foo'], '->load() parses aliases');
|
$this->assertEquals('foo', (string) $aliases['alias_for_foo'], '->load() parses aliases');
|
||||||
@ -243,7 +243,6 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('foo', (string) $aliases['another_alias_for_foo']);
|
$this->assertEquals('foo', (string) $aliases['another_alias_for_foo']);
|
||||||
$this->assertFalse($aliases['another_alias_for_foo']->isPublic());
|
$this->assertFalse($aliases['another_alias_for_foo']->isPublic());
|
||||||
|
|
||||||
$this->assertNull($services['request']->getDecoratedService());
|
|
||||||
$this->assertEquals(array('decorated', null), $services['decorator_service']->getDecoratedService());
|
$this->assertEquals(array('decorated', null), $services['decorator_service']->getDecoratedService());
|
||||||
$this->assertEquals(array('decorated', 'decorated.pif-pouf'), $services['decorator_service_with_name']->getDecoratedService());
|
$this->assertEquals(array('decorated', 'decorated.pif-pouf'), $services['decorator_service_with_name']->getDecoratedService());
|
||||||
}
|
}
|
||||||
|
@ -135,6 +135,10 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('BazClass', $services['factory_service']->getClass());
|
$this->assertEquals('BazClass', $services['factory_service']->getClass());
|
||||||
$this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
|
$this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
|
||||||
$this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
|
$this->assertEquals('getInstance', $services['factory_service']->getFactoryMethod());
|
||||||
|
$this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
|
||||||
|
$this->assertTrue($services['request']->isSynchronized(), '->load() parses the synchronized flag');
|
||||||
|
$this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
|
||||||
|
$this->assertNull($services['request']->getDecoratedService());
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testLoadServices()
|
public function testLoadServices()
|
||||||
@ -160,10 +164,6 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals(array(new Reference('baz'), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
|
$this->assertEquals(array(new Reference('baz'), 'getClass'), $services['new_factory2']->getFactory(), '->load() parses the factory tag');
|
||||||
$this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
|
$this->assertEquals(array('BazClass', 'getInstance'), $services['new_factory3']->getFactory(), '->load() parses the factory tag');
|
||||||
|
|
||||||
$this->assertTrue($services['request']->isSynthetic(), '->load() parses the synthetic flag');
|
|
||||||
$this->assertTrue($services['request']->isSynchronized(false), '->load() parses the synchronized flag');
|
|
||||||
$this->assertTrue($services['request']->isLazy(), '->load() parses the lazy flag');
|
|
||||||
|
|
||||||
$aliases = $container->getAliases();
|
$aliases = $container->getAliases();
|
||||||
$this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses aliases');
|
$this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses aliases');
|
||||||
$this->assertEquals('foo', (string) $aliases['alias_for_foo'], '->load() parses aliases');
|
$this->assertEquals('foo', (string) $aliases['alias_for_foo'], '->load() parses aliases');
|
||||||
@ -172,7 +172,6 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
|||||||
$this->assertEquals('foo', (string) $aliases['another_alias_for_foo']);
|
$this->assertEquals('foo', (string) $aliases['another_alias_for_foo']);
|
||||||
$this->assertFalse($aliases['another_alias_for_foo']->isPublic());
|
$this->assertFalse($aliases['another_alias_for_foo']->isPublic());
|
||||||
|
|
||||||
$this->assertNull($services['request']->getDecoratedService());
|
|
||||||
$this->assertEquals(array('decorated', null), $services['decorator_service']->getDecoratedService());
|
$this->assertEquals(array('decorated', null), $services['decorator_service']->getDecoratedService());
|
||||||
$this->assertEquals(array('decorated', 'decorated.pif-pouf'), $services['decorator_service_with_name']->getDecoratedService());
|
$this->assertEquals(array('decorated', 'decorated.pif-pouf'), $services['decorator_service_with_name']->getDecoratedService());
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user