Przeglądaj źródła

[DoctrineMongoDBBundle] Refactoring how the document_managers are loaded in the Extension and removing two unneeded DIC parameters.

Ryan Weaver 14 lat temu
rodzic
commit
1e492e231c

+ 39 - 39
src/Symfony/Bundle/DoctrineMongoDBBundle/DependencyInjection/DoctrineMongoDBExtension.php

@@ -88,7 +88,24 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
         // load the connections
         $this->loadConnections($config['connections'], $container);
 
-        $this->loadDocumentManagers($config, $container);
+        // if no "document_managers" were given, setup the default manager
+        if (!isset($config['document_managers']) || !$config['document_managers']) {
+            $defaultName = $config['default_document_manager'];
+            $config['document_managers'] = array($defaultName => array(
+                'mappings'          => $config['mappings'],
+                'default_database'  => $config['default_database'],
+                'metadata_cache_driver' => $config['metadata_cache_driver'],
+            ));
+        }
+        // load the document managers
+        $this->loadDocumentManagers(
+            $config['document_managers'],
+            $config['default_document_manager'],
+            $config['default_database'],
+            $config['metadata_cache_driver'],
+            $container
+        );
+
         $this->loadConstraints($config, $container);
     }
 
@@ -101,12 +118,10 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
     protected function overrideParameters($options, ContainerBuilder $container)
     {
         $overrides = array(
-            'default_document_manager',
             'proxy_namespace',
             'auto_generate_proxy_classes',
             'hydrator_namespace',
             'auto_generate_hydrator_classes',
-            'default_database',
         );
 
         foreach ($overrides as $key) {
@@ -124,30 +139,39 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
     /**
      * Loads the document managers configuration.
      *
-     * @param array $config An array of configuration settings
+     * @param array $dmConfigs An array of document manager configs
+     * @param string $defaultDM The default document manager name
+     * @param string $defaultDB The default db name
+     * @param string $defaultMetadataCache The default metadata cache configuration
      * @param ContainerBuilder $container A ContainerBuilder instance
      */
-    protected function loadDocumentManagers(array $config, ContainerBuilder $container)
+    protected function loadDocumentManagers(array $dmConfigs, $defaultDM, $defaultDB, $defaultMetadataCache, ContainerBuilder $container)
     {
-        $documentManagers = $this->getDocumentManagers($config, $container);
-        foreach ($documentManagers as $name => $documentManager) {
+        foreach ($dmConfigs as $name => $documentManager) {
             $documentManager['name'] = $name;
-            $this->loadDocumentManager($documentManager, $container, $config['metadata_cache_driver']);
+            $this->loadDocumentManager(
+                $documentManager,
+                $defaultDM,
+                $defaultDB,
+                $defaultMetadataCache,
+                $container
+            );
         }
-        $container->setParameter('doctrine.odm.mongodb.document_managers', array_keys($documentManagers));
+        $container->setParameter('doctrine.odm.mongodb.document_managers', array_keys($dmConfigs));
     }
 
     /**
      * Loads a document manager configuration.
      *
      * @param array $documentManager        A document manager configuration array
-     * @param ContainerBuilder $container   A ContainerBuilder instance
-     * @param array $defaultMetadataCache   The default metadata cache configuration array
+     * @param string $defaultDM The default document manager name
+     * @param string $defaultDB The default db name
+     * @param string $defaultMetadataCache The default metadata cache configuration
+     * @param ContainerBuilder $container A ContainerBuilder instance
      */
-    protected function loadDocumentManager(array $documentManager, ContainerBuilder $container, $defaultMetadataCache)
+    protected function loadDocumentManager(array $documentManager, $defaultDM, $defaultDB, $defaultMetadataCache, ContainerBuilder $container)
     {
-        $defaultDocumentManager = $container->getParameter('doctrine.odm.mongodb.default_document_manager');
-        $defaultDatabase = isset($documentManager['default_database']) ? $documentManager['default_database'] : $container->getParameter('doctrine.odm.mongodb.default_database');
+        $defaultDatabase = isset($documentManager['default_database']) ? $documentManager['default_database'] : $defaultDB;
         $configServiceName = sprintf('doctrine.odm.mongodb.%s_configuration', $documentManager['name']);
 
         if ($container->hasDefinition($configServiceName)) {
@@ -200,7 +224,7 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
         $odmDmDef->addTag('doctrine.odm.mongodb.document_manager');
         $container->setDefinition(sprintf('doctrine.odm.mongodb.%s_document_manager', $documentManager['name']), $odmDmDef);
 
-        if ($documentManager['name'] == $defaultDocumentManager) {
+        if ($documentManager['name'] == $defaultDM) {
             $container->setAlias(
                 'doctrine.odm.mongodb.document_manager',
                 new Alias(sprintf('doctrine.odm.mongodb.%s_document_manager', $documentManager['name']))
@@ -212,30 +236,6 @@ class DoctrineMongoDBExtension extends AbstractDoctrineExtension
         }
     }
 
-    /**
-     * Gets the configured document managers.
-     *
-     * @param array $config An array of configuration settings
-     * @param ContainerBuilder $container A ContainerBuilder instance
-     */
-    protected function getDocumentManagers(array $config, ContainerBuilder $container)
-    {
-        $defaultDocumentManager = $container->getParameter('doctrine.odm.mongodb.default_document_manager');
-
-        $documentManagers = array();
-
-        if (count($config['document_managers'])) {
-            $configDocumentManagers = $config['document_managers'];
-
-            foreach ($configDocumentManagers as $name => $documentManager) {
-                $documentManagers[isset($documentManager['id']) ? $documentManager['id'] : $name] = $documentManager;
-            }
-        } else {
-            $documentManagers = array($defaultDocumentManager => $config);
-        }
-        return $documentManagers;
-    }
-
     /**
      * Loads the configured document manager metadata cache driver.
      *

+ 0 - 2
src/Symfony/Bundle/DoctrineMongoDBBundle/Resources/config/mongodb.xml

@@ -5,8 +5,6 @@
     xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
 
   <parameters>
-    <parameter key="doctrine.odm.mongodb.default_document_manager">default</parameter>
-    <parameter key="doctrine.odm.mongodb.default_database">default</parameter>
     <parameter key="doctrine.odm.mongodb.connection_class">Doctrine\MongoDB\Connection</parameter>
     <parameter key="doctrine.odm.mongodb.configuration_class">Doctrine\ODM\MongoDB\Configuration</parameter>
     <parameter key="doctrine.odm.mongodb.document_manager_class">Doctrine\ODM\MongoDB\DocumentManager</parameter>