From 0e3b88a058abfe58b9e1f1e1ef281092c12c32c9 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Tue, 22 Jun 2010 17:27:49 +0200 Subject: [PATCH] [DependencyInjection] fixed inheritence when using extensions --- .../DependencyInjection/Loader/XmlFileLoader.php | 12 ++++++------ .../DependencyInjection/Loader/YamlFileLoader.php | 14 +++++++------- .../Loader/LoaderExtensionTest.php | 2 +- .../Loader/XmlFileLoaderTest.php | 4 ++++ .../Loader/YamlFileLoaderTest.php | 4 ++++ .../includes/ProjectExtension.php | 3 +++ .../DependencyInjection/xml/services10.xml | 10 +++++++++- .../DependencyInjection/yaml/services10.yml | 7 +++++++ 8 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/Symfony/Components/DependencyInjection/Loader/XmlFileLoader.php b/src/Symfony/Components/DependencyInjection/Loader/XmlFileLoader.php index 175e63ee10..82e0d4bb6e 100644 --- a/src/Symfony/Components/DependencyInjection/Loader/XmlFileLoader.php +++ b/src/Symfony/Components/DependencyInjection/Loader/XmlFileLoader.php @@ -53,12 +53,6 @@ class XmlFileLoader extends FileLoader // imports $this->parseImports($configuration, $xml, $file); - // parameters - $this->parseParameters($configuration, $xml, $file); - - // services - $this->parseDefinitions($configuration, $xml, $file); - // extensions $this->loadFromExtensions($configuration, $xml); @@ -66,6 +60,12 @@ class XmlFileLoader extends FileLoader $configuration->mergeExtensionsConfiguration(); } + // parameters + $this->parseParameters($configuration, $xml, $file); + + // services + $this->parseDefinitions($configuration, $xml, $file); + return $configuration; } diff --git a/src/Symfony/Components/DependencyInjection/Loader/YamlFileLoader.php b/src/Symfony/Components/DependencyInjection/Loader/YamlFileLoader.php index 30ee5241dd..64351bd807 100644 --- a/src/Symfony/Components/DependencyInjection/Loader/YamlFileLoader.php +++ b/src/Symfony/Components/DependencyInjection/Loader/YamlFileLoader.php @@ -57,6 +57,13 @@ class YamlFileLoader extends FileLoader // imports $this->parseImports($configuration, $content, $file); + // extensions + $this->loadFromExtensions($configuration, $content); + + if ($main) { + $configuration->mergeExtensionsConfiguration(); + } + // parameters if (isset($content['parameters'])) { foreach ($content['parameters'] as $key => $value) { @@ -67,13 +74,6 @@ class YamlFileLoader extends FileLoader // services $this->parseDefinitions($configuration, $content, $file); - // extensions - $this->loadFromExtensions($configuration, $content); - - if ($main) { - $configuration->mergeExtensionsConfiguration(); - } - return $configuration; } diff --git a/tests/Symfony/Tests/Components/DependencyInjection/Loader/LoaderExtensionTest.php b/tests/Symfony/Tests/Components/DependencyInjection/Loader/LoaderExtensionTest.php index 9a7a592e4b..8832c2d799 100644 --- a/tests/Symfony/Tests/Components/DependencyInjection/Loader/LoaderExtensionTest.php +++ b/tests/Symfony/Tests/Components/DependencyInjection/Loader/LoaderExtensionTest.php @@ -29,6 +29,6 @@ class LoaderExtensionTest extends \PHPUnit_Framework_TestCase } $config = $extension->load('bar', array('foo' => 'bar'), new BuilderConfiguration()); - $this->assertEquals(array('project.parameter.bar' => 'bar'), $config->getParameters(), '->load() calls the method tied to the given tag'); + $this->assertEquals(array('project.parameter.bar' => 'bar', 'project.parameter.foo' => 'bar'), $config->getParameters(), '->load() calls the method tied to the given tag'); } } diff --git a/tests/Symfony/Tests/Components/DependencyInjection/Loader/XmlFileLoaderTest.php b/tests/Symfony/Tests/Components/DependencyInjection/Loader/XmlFileLoaderTest.php index 063f52e92f..c380fc8118 100644 --- a/tests/Symfony/Tests/Components/DependencyInjection/Loader/XmlFileLoaderTest.php +++ b/tests/Symfony/Tests/Components/DependencyInjection/Loader/XmlFileLoaderTest.php @@ -166,9 +166,13 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase $config = $loader->load('services10.xml'); $services = $config->getDefinitions(); $parameters = $config->getParameters(); + $this->assertTrue(isset($services['project.service.bar']), '->load() parses extension elements'); $this->assertTrue(isset($parameters['project.parameter.bar']), '->load() parses extension elements'); + $this->assertEquals('BAR', $services['project.service.foo']->getClass(), '->load() parses extension elements'); + $this->assertEquals('BAR', $parameters['project.parameter.foo'], '->load() parses extension elements'); + try { $config = $loader->load('services11.xml'); $this->fail('->load() throws an InvalidArgumentException if the tag is not valid'); diff --git a/tests/Symfony/Tests/Components/DependencyInjection/Loader/YamlFileLoaderTest.php b/tests/Symfony/Tests/Components/DependencyInjection/Loader/YamlFileLoaderTest.php index 8f25da26fc..f2f74697d1 100644 --- a/tests/Symfony/Tests/Components/DependencyInjection/Loader/YamlFileLoaderTest.php +++ b/tests/Symfony/Tests/Components/DependencyInjection/Loader/YamlFileLoaderTest.php @@ -107,9 +107,13 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase $config = $loader->load('services10.yml'); $services = $config->getDefinitions(); $parameters = $config->getParameters(); + $this->assertTrue(isset($services['project.service.bar']), '->load() parses extension elements'); $this->assertTrue(isset($parameters['project.parameter.bar']), '->load() parses extension elements'); + $this->assertEquals('BAR', $services['project.service.foo']->getClass(), '->load() parses extension elements'); + $this->assertEquals('BAR', $parameters['project.parameter.foo'], '->load() parses extension elements'); + try { $config = $loader->load('services11.yml'); $this->fail('->load() throws an InvalidArgumentException if the tag is not valid'); diff --git a/tests/fixtures/Symfony/Components/DependencyInjection/includes/ProjectExtension.php b/tests/fixtures/Symfony/Components/DependencyInjection/includes/ProjectExtension.php index 13958ed6e4..53ac48d787 100644 --- a/tests/fixtures/Symfony/Components/DependencyInjection/includes/ProjectExtension.php +++ b/tests/fixtures/Symfony/Components/DependencyInjection/includes/ProjectExtension.php @@ -11,6 +11,9 @@ class ProjectExtension extends LoaderExtension $configuration->setDefinition('project.service.bar', new Definition('FooClass')); $configuration->setParameter('project.parameter.bar', isset($config['foo']) ? $config['foo'] : 'foobar'); + $configuration->setDefinition('project.service.foo', new Definition('FooClass')); + $configuration->setParameter('project.parameter.foo', isset($config['foo']) ? $config['foo'] : 'foobar'); + return $configuration; } diff --git a/tests/fixtures/Symfony/Components/DependencyInjection/xml/services10.xml b/tests/fixtures/Symfony/Components/DependencyInjection/xml/services10.xml index 76db79e804..53c11ee413 100644 --- a/tests/fixtures/Symfony/Components/DependencyInjection/xml/services10.xml +++ b/tests/fixtures/Symfony/Components/DependencyInjection/xml/services10.xml @@ -3,6 +3,14 @@ - + + BAR + + + + + + + diff --git a/tests/fixtures/Symfony/Components/DependencyInjection/yaml/services10.yml b/tests/fixtures/Symfony/Components/DependencyInjection/yaml/services10.yml index 068ab20be6..e34d812e07 100644 --- a/tests/fixtures/Symfony/Components/DependencyInjection/yaml/services10.yml +++ b/tests/fixtures/Symfony/Components/DependencyInjection/yaml/services10.yml @@ -1 +1,8 @@ +parameters: + project.parameter.foo: BAR + +services: + project.service.foo: + class: BAR + project.bar: ~