diff --git a/src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php b/src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php index 5ae0e77d7f27..0d422e01035f 100644 --- a/src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php +++ b/src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php @@ -64,10 +64,16 @@ public function load(array $configs, ContainerBuilder $container) // Load DoctrineMongoDBBundle/Resources/config/mongodb.xml $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config')); $loader->load('mongodb.xml'); + $processor = new Processor(); $configuration = new Configuration(); $config = $processor->process($configuration->getConfigTree(), $configs); + // can't currently default this correctly in Configuration + if (!isset($config['metadata_cache_driver'])) { + $config['metadata_cache_driver'] = array('type' => 'array'); + } + $this->loadDefaults($config, $container); $this->loadConnections($config, $container); $this->loadDocumentManagers($config, $container); @@ -97,10 +103,6 @@ protected function loadDefaults(array $config, ContainerBuilder $container) $container->setParameter('doctrine.odm.mongodb.'.$key, $config[$key]); } } - - if (isset($config['metadata_cache_driver'])) { - $container->setParameter('doctrine.odm.mongodb.metadata_cache_driver', $config['metadata_cache_driver']['type']); - } } /** @@ -114,7 +116,7 @@ protected function loadDocumentManagers(array $config, ContainerBuilder $contain $documentManagers = $this->getDocumentManagers($config, $container); foreach ($documentManagers as $name => $documentManager) { $documentManager['name'] = $name; - $this->loadDocumentManager($documentManager, $container); + $this->loadDocumentManager($documentManager, $container, $config['metadata_cache_driver']); } $container->setParameter('doctrine.odm.mongodb.document_managers', array_keys($documentManagers)); } @@ -123,9 +125,10 @@ protected function loadDocumentManagers(array $config, ContainerBuilder $contain * Loads a document manager configuration. * * @param array $documentManager A document manager configuration array - * @param ContainerBuilder $container A ContainerBuilder instance + * @param ContainerBuilder $container A ContainerBuilder instance + * @param array $defaultMetadataCache The default metadata cache configuration array */ - protected function loadDocumentManager(array $documentManager, ContainerBuilder $container) + protected function loadDocumentManager(array $documentManager, ContainerBuilder $container, $defaultMetadataCache) { $defaultDocumentManager = $container->getParameter('doctrine.odm.mongodb.default_document_manager'); $defaultDatabase = isset($documentManager['default_database']) ? $documentManager['default_database'] : $container->getParameter('doctrine.odm.mongodb.default_database'); @@ -139,7 +142,7 @@ protected function loadDocumentManager(array $documentManager, ContainerBuilder } $this->loadDocumentManagerBundlesMappingInformation($documentManager, $odmConfigDef, $container); - $this->loadDocumentManagerMetadataCacheDriver($documentManager, $container); + $this->loadDocumentManagerMetadataCacheDriver($documentManager, $container, $defaultMetadataCache); $methods = array( 'setMetadataCacheImpl' => new Reference(sprintf('doctrine.odm.mongodb.%s_metadata_cache', $documentManager['name'])), @@ -220,14 +223,14 @@ protected function getDocumentManagers(array $config, ContainerBuilder $containe /** * Loads the configured document manager metadata cache driver. * - * @param array $config A configured document manager array - * @param ContainerBuilder $container A ContainerBuilder instance + * @param array $config A configured document manager array + * @param ContainerBuilder $container A ContainerBuilder instance + * @param array $defaultMetadataCache The default metadata cache configuration array */ - protected function loadDocumentManagerMetadataCacheDriver(array $documentManager, ContainerBuilder $container) + protected function loadDocumentManagerMetadataCacheDriver(array $documentManager, ContainerBuilder $container, $defaultMetadataCache) { - $metadataCacheDriver = $container->getParameter('doctrine.odm.mongodb.metadata_cache_driver'); - $dmMetadataCacheDriver = isset($documentManager['metadata_cache_driver']) ? $documentManager['metadata_cache_driver'] : $metadataCacheDriver; - $type = is_array($dmMetadataCacheDriver) ? $dmMetadataCacheDriver['type'] : $dmMetadataCacheDriver; + $dmMetadataCacheDriver = isset($documentManager['metadata_cache_driver']) ? $documentManager['metadata_cache_driver'] : $defaultMetadataCache; + $type = $dmMetadataCacheDriver['type']; if ('memcache' === $type) { $memcacheClass = isset($dmMetadataCacheDriver['class']) ? $dmMetadataCacheDriver['class'] : sprintf('%%doctrine.odm.mongodb.cache.%s_class%%', $type); diff --git a/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/AbstractMongoDBExtensionTest.php b/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/AbstractMongoDBExtensionTest.php index ca9e928a1e0a..b5045084aab5 100644 --- a/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/AbstractMongoDBExtensionTest.php +++ b/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/AbstractMongoDBExtensionTest.php @@ -321,7 +321,6 @@ public function testDependencyInjectionImportsOverrideDefaults() $container->getCompilerPassConfig()->setRemovingPasses(array()); $container->compile(); - $this->assertEquals('apc', $container->getParameter('doctrine.odm.mongodb.metadata_cache_driver')); $this->assertTrue($container->getParameter('doctrine.odm.mongodb.auto_generate_proxy_classes')); } diff --git a/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/xml/odm_imports_import.xml b/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/xml/odm_imports_import.xml index 489fbe0ea472..b06efb462862 100644 --- a/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/xml/odm_imports_import.xml +++ b/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/xml/odm_imports_import.xml @@ -8,7 +8,6 @@ diff --git a/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/yml/odm_imports_import.yml b/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/yml/odm_imports_import.yml index b39f7c386dfe..888177d921d2 100644 --- a/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/yml/odm_imports_import.yml +++ b/src/Symfony/Bundle/DoctrineMongoDBBundle/Tests/DependencyInjection/Fixtures/config/yml/odm_imports_import.yml @@ -1,3 +1,2 @@ doctrine_mongo_db: auto_generate_proxy_classes: false - metadata_cache_driver: apc