浏览代码

[DoctrineBundle] moved more DIC definition into orm.xml

Fabien Potencier 14 年之前
父节点
当前提交
f7808de3a8

+ 15 - 16
src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php

@@ -64,9 +64,10 @@ class DoctrineExtension extends AbstractDoctrineExtension
             $keys = array_keys($config['connections']);
             $config['default_connection'] = reset($keys);
         }
+        $this->defaultConnection = $config['default_connection'];
 
-        $container->setAlias('database_connection', sprintf('doctrine.dbal.%s_connection', $config['default_connection']));
-        $container->setAlias('doctrine.dbal.event_manager', new Alias(sprintf('doctrine.dbal.%s_connection.event_manager', $config['default_connection']), false));
+        $container->setAlias('database_connection', sprintf('doctrine.dbal.%s_connection', $this->defaultConnection));
+        $container->setAlias('doctrine.dbal.event_manager', new Alias(sprintf('doctrine.dbal.%s_connection.event_manager', $this->defaultConnection), false));
 
         $container->getDefinition('doctrine.dbal.connection_factory')->replaceArgument(0, $config['types']);
 
@@ -75,7 +76,7 @@ class DoctrineExtension extends AbstractDoctrineExtension
             $connections[$name] = sprintf('doctrine.dbal.%s_connection', $name);
         }
         $container->getDefinition('doctrine')->replaceArgument(1, $connections);
-        $container->getDefinition('doctrine')->replaceArgument(3, $config['default_connection']);
+        $container->getDefinition('doctrine')->replaceArgument(3, $this->defaultConnection);
 
         foreach ($config['connections'] as $name => $connection) {
             $this->loadDbalConnection($name, $connection, $container);
@@ -220,23 +221,21 @@ class DoctrineExtension extends AbstractDoctrineExtension
             }
         }
 
-        $entityManagerService = sprintf('doctrine.orm.%s_entity_manager', $entityManager['name']);
-        $connectionId = isset($entityManager['connection']) ? sprintf('doctrine.dbal.%s_connection', $entityManager['connection']) : 'database_connection';
-        $eventManagerID = isset($entityManager['connection']) ? sprintf('doctrine.dbal.%s_connection.event_manager', $entityManager['connection']) : 'doctrine.dbal.event_manager';
-
-        $ormEmArgs = array(
-            new Reference($connectionId),
-            new Reference(sprintf('doctrine.orm.%s_configuration', $entityManager['name']))
-        );
+        if (!isset($entityManager['connection'])) {
+            $entityManager['connection'] = $this->defaultConnection;
+        }
 
-        $ormEmDef = new Definition('%doctrine.orm.entity_manager.class%', $ormEmArgs);
-        $ormEmDef->setFactoryClass('%doctrine.orm.entity_manager.class%');
-        $ormEmDef->setFactoryMethod('create');
-        $container->setDefinition($entityManagerService, $ormEmDef);
+        $container
+            ->setDefinition(sprintf('doctrine.orm.%s_entity_manager', $entityManager['name']), new DefinitionDecorator('doctrine.orm.entity_manager.abstract'))
+            ->setArguments(array(
+                new Reference(sprintf('doctrine.dbal.%s_connection', $entityManager['connection'])),
+                new Reference(sprintf('doctrine.orm.%s_configuration', $entityManager['name']))
+            ))
+        ;
 
         $container->setAlias(
             sprintf('doctrine.orm.%s_entity_manager.event_manager', $entityManager['name']),
-            new Alias($eventManagerID, false)
+            new Alias(sprintf('doctrine.dbal.%s_connection.event_manager', $entityManager['connection']), false)
         );
     }
 

+ 2 - 0
src/Symfony/Bundle/DoctrineBundle/Resources/config/orm.xml

@@ -58,5 +58,7 @@
         </service>
 
         <service id="doctrine.orm.configuration" class="%doctrine.orm.configuration.class%" abstract="true" public="false" />
+
+        <service id="doctrine.orm.entity_manager.abstract" class="%doctrine.orm.entity_manager.class%" factory-class="%doctrine.orm.entity_manager.class%" factory-method="create" abstract="true" />
     </services>
 </container>

+ 3 - 3
src/Symfony/Bundle/DoctrineBundle/Tests/DependencyInjection/AbstractDoctrineExtensionTest.php

@@ -157,7 +157,7 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
 
         $arguments = $definition->getArguments();
         $this->assertInstanceOf('Symfony\Component\DependencyInjection\Reference', $arguments[0]);
-        $this->assertEquals('database_connection', (string) $arguments[0]);
+        $this->assertEquals('doctrine.dbal.default_connection', (string) $arguments[0]);
         $this->assertInstanceOf('Symfony\Component\DependencyInjection\Reference', $arguments[1]);
         $this->assertEquals('doctrine.orm.default_configuration', (string) $arguments[1]);
 
@@ -195,7 +195,7 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $this->assertEquals('create', $definition->getFactoryMethod());
 
         $this->assertDICConstructorArguments($definition, array(
-            new Reference('database_connection'), new Reference('doctrine.orm.default_configuration')
+            new Reference('doctrine.dbal.default_connection'), new Reference('doctrine.orm.default_configuration')
         ));
     }
 
@@ -233,7 +233,7 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $this->assertEquals('create', $definition->getFactoryMethod());
 
         $this->assertDICConstructorArguments($definition, array(
-            new Reference('database_connection'), new Reference('doctrine.orm.default_configuration')
+            new Reference('doctrine.dbal.default_connection'), new Reference('doctrine.orm.default_configuration')
         ));
     }