Procházet zdrojové kódy

[DependencyInjection] fixed inheritence when using extensions

Fabien Potencier před 15 roky
rodič
revize
0e3b88a058

+ 6 - 6
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;
     }
 

+ 7 - 7
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;
     }
 

+ 1 - 1
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');
     }
 }

+ 4 - 0
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');

+ 4 - 0
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');

+ 3 - 0
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;
     }
 

+ 9 - 1
tests/fixtures/Symfony/Components/DependencyInjection/xml/services10.xml

@@ -3,6 +3,14 @@
 <container xmlns="http://www.symfony-project.org/schema/dic/services"
     xmlns:project="http://www.example.com/schema/project">
 
-  <project:bar />
+    <parameters>
+        <parameter key="project.parameter.foo">BAR</parameter>
+    </parameters>
+
+    <services>
+        <service id="project.service.foo" class="BAR" />
+    </services>
+
+    <project:bar />
 
 </container>

+ 7 - 0
tests/fixtures/Symfony/Components/DependencyInjection/yaml/services10.yml

@@ -1 +1,8 @@
+parameters:
+    project.parameter.foo: BAR
+
+services:
+    project.service.foo:
+        class: BAR
+
 project.bar: ~