Explorar o código

[DoctrineMongoDBBundle] updated to only load default settings once

Fixed a bug that caused DoctrineMongoDBBundle to load default settings for
every parsed config file rather than just the first.  This caused
imported files to be override by default values.
Brandon Turner %!s(int64=15) %!d(string=hai) anos
pai
achega
c9001f37fc

+ 6 - 3
src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/MongoDBExtension.php

@@ -74,9 +74,12 @@ class MongoDBExtension extends Extension
      */
     protected function loadDefaults(array $config, ContainerBuilder $container)
     {
-        // Load DoctrineMongoDBBundle/Resources/config/mongodb.xml
-        $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
-        $loader->load($this->resources['mongodb']);
+        if(!$container->hasDefinition('doctrine.odm.mongodb.metadata.annotation'))
+        {
+            // Load DoctrineMongoDBBundle/Resources/config/mongodb.xml
+            $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
+            $loader->load($this->resources['mongodb']);
+        }
 
         // Allow these application configuration options to override the defaults
         $options = array(

+ 14 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/AbstractMongoDBExtensionTest.php

@@ -295,6 +295,20 @@ abstract class AbstractMongoDBExtensionTest extends TestCase
         $this->assertEquals(11211, $calls[0][1][1]);
     }
 
+    public function testDependencyInjectionImportsOverrideDefaults()
+    {
+        $container = new ContainerBuilder();
+        $loader = $this->getMongoDbExtensionLoader();
+        $container->registerExtension($loader);
+
+        $this->loadFromFile($container, 'odm_imports');
+
+        $container->freeze();
+
+        $this->assertEquals('apc', $container->getParameter('doctrine.odm.mongodb.metadata_cache_driver'));
+        $this->assertTrue($container->getParameter('doctrine.odm.mongodb.auto_generate_proxy_classes'));
+    }
+
     protected function getMongoDbExtensionLoader($bundle = 'YamlBundle')
     {
         require_once __DIR__.'/Fixtures/Bundles/'.$bundle.'/'.$bundle.'.php';

+ 17 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/xml/odm_imports.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" ?>
+
+<container xmlns="http://www.symfony-project.org/schema/dic/services"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine/odm/mongodb"
+    xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd
+                        http://www.symfony-project.org/schema/dic/doctrine/odm/mongodb http://www.symfony-project.org/schema/dic/doctrine/odm/mongodb/mongodb-1.0.xsd">
+
+    <imports>
+        <import resource="odm_imports_import.xml" />
+    </imports>
+
+    <doctrine:mongodb
+        auto_generate_proxy_classes="true"
+    >
+    </doctrine:mongodb>
+</container>

+ 14 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/xml/odm_imports_import.xml

@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+
+<container xmlns="http://www.symfony-project.org/schema/dic/services"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine/odm/mongodb"
+    xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services http://www.symfony-project.org/schema/dic/services/services-1.0.xsd
+                        http://www.symfony-project.org/schema/dic/doctrine/odm/mongodb http://www.symfony-project.org/schema/dic/doctrine/odm/mongodb/mongodb-1.0.xsd">
+
+    <doctrine:mongodb
+        auto_generate_proxy_classes="false"
+        metadata_cache_driver="apc"
+    >
+    </doctrine:mongodb>
+</container>

+ 5 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/yml/odm_imports.yml

@@ -0,0 +1,5 @@
+imports:
+  - { resource: odm_imports_import.yml }
+
+doctrine_odm.mongodb:
+  auto_generate_proxy_classes: true

+ 3 - 0
src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/yml/odm_imports_import.yml

@@ -0,0 +1,3 @@
+doctrine_odm.mongodb:
+  auto_generate_proxy_classes: false
+  metadata_cache_driver: apc