Kaynağa Gözat

[DoctrineBundle] re-introduced parameters in the DIC for better overridability

Fabien Potencier 14 yıl önce
ebeveyn
işleme
05a946bf9d

+ 1 - 1
src/Symfony/Bundle/DoctrineBundle/DependencyInjection/Compiler/RegisterEventListenersAndSubscribersPass.php

@@ -20,7 +20,7 @@ class RegisterEventListenersAndSubscribersPass implements CompilerPassInterface
         }
 
         $this->container = $container;
-        $this->connections = $container->getDefinition('doctrine')->getArgument(1);
+        $this->connections = $container->getParameter('doctrine.connections');
 
         foreach ($container->findTaggedServiceIds('doctrine.event_subscriber') as $subscriberId => $instances) {
             $this->registerSubscriber($subscriberId, $instances);

+ 5 - 5
src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php

@@ -69,14 +69,14 @@ class DoctrineExtension extends AbstractDoctrineExtension
         $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']);
+        $container->setParameter('doctrine.dbal.connection_factory.types', $config['types']);
 
         $connections = array();
         foreach (array_keys($config['connections']) as $name) {
             $connections[$name] = sprintf('doctrine.dbal.%s_connection', $name);
         }
-        $container->getDefinition('doctrine')->replaceArgument(1, $connections);
-        $container->getDefinition('doctrine')->replaceArgument(3, $this->defaultConnection);
+        $container->setParameter('doctrine.connections', $connections);
+        $container->setParameter('doctrine.default_connection', $this->defaultConnection);
 
         foreach ($config['connections'] as $name => $connection) {
             $this->loadDbalConnection($name, $connection, $container);
@@ -173,13 +173,13 @@ class DoctrineExtension extends AbstractDoctrineExtension
         foreach (array_keys($config['entity_managers']) as $name) {
             $this->entityManagers[$name] = sprintf('doctrine.orm.%s_entity_manager', $name);
         }
-        $container->getDefinition('doctrine')->replaceArgument(2, $this->entityManagers);
+        $container->setParameter('doctrine.entity_managers', $this->entityManagers);
 
         if (empty($config['default_entity_manager'])) {
             $tmp = array_keys($this->entityManagers);
             $config['default_entity_manager'] = reset($tmp);
         }
-        $container->getDefinition('doctrine')->replaceArgument(4, $config['default_entity_manager']);
+        $container->setParameter('doctrine.default_entity_manager', $config['default_entity_manager']);
 
         $options = array('auto_generate_proxy_classes', 'proxy_dir', 'proxy_namespace');
         foreach ($options as $key) {

+ 5 - 5
src/Symfony/Bundle/DoctrineBundle/Resources/config/dbal.xml

@@ -32,7 +32,7 @@
         </service>
 
         <service id="doctrine.dbal.connection_factory" class="%doctrine.dbal.connection_factory.class%">
-            <argument /> <!-- Types -->
+            <argument>%doctrine.dbal.connection_factory.types%</argument>
         </service>
 
         <service id="doctrine.dbal.connection" class="%doctrine.dbal.connection.class%" factory-service="doctrine.dbal.connection_factory" factory-method="createConnection" abstract="true" />
@@ -43,10 +43,10 @@
 
         <service id="doctrine" class="%doctrine.class%">
             <argument type="service" id="service_container" />
-            <argument type="collection" /> <!-- connections -->
-            <argument type="collection" /> <!-- entity managers -->
-            <argument /> <!-- default connection name -->
-            <argument /> <!-- default entity manager name -->
+            <argument>%doctrine.connections%</argument>
+            <argument>%doctrine.entity_managers%</argument>
+            <argument>%doctrine.default_connection%</argument>
+            <argument>%doctrine.default_entity_manager%</argument>
         </service>
     </services>
 </container>

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

@@ -33,7 +33,9 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $loader->load(array(array(), array('dbal' => array('default_connection' => 'foo')), array()), $container);
 
         // doctrine.dbal.default_connection
-        $this->assertEquals('foo', $container->getDefinition('doctrine')->getArgument(3), '->load() overrides existing configuration options');
+        $this->assertEquals('%doctrine.default_connection%', $container->getDefinition('doctrine')->getArgument(3), '->load() overrides existing configuration options');
+        $this->assertEquals('foo', $container->getParameter('doctrine.default_connection'), '->load() overrides existing configuration options');
+        
     }
 
     public function testDbalLoad()
@@ -153,7 +155,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $this->assertEquals('%doctrine.orm.entity_manager.class%', $definition->getFactoryClass());
         $this->assertEquals('create', $definition->getFactoryMethod());
 
-        $this->assertEquals(array('default' => 'doctrine.orm.default_entity_manager'), $container->getDefinition('doctrine')->getArgument(2), "Set of the existing EntityManagers names is incorrect.");
+        $this->assertEquals(array('default' => 'doctrine.orm.default_entity_manager'), $container->getParameter('doctrine.entity_managers'), "Set of the existing EntityManagers names is incorrect.");
+        $this->assertEquals('%doctrine.entity_managers%', $container->getDefinition('doctrine')->getArgument(2), "Set of the existing EntityManagers names is incorrect.");
 
         $arguments = $definition->getArguments();
         $this->assertInstanceOf('Symfony\Component\DependencyInjection\Reference', $arguments[0]);
@@ -574,7 +577,8 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
 
         $this->compileContainer($container);
 
-        $this->assertEquals(array('em1' => 'doctrine.orm.em1_entity_manager', 'em2' => 'doctrine.orm.em2_entity_manager'), $container->getDefinition('doctrine')->getArgument(2), "Set of the existing EntityManagers names is incorrect.");
+        $this->assertEquals(array('em1' => 'doctrine.orm.em1_entity_manager', 'em2' => 'doctrine.orm.em2_entity_manager'), $container->getParameter('doctrine.entity_managers'), "Set of the existing EntityManagers names is incorrect.");
+        $this->assertEquals('%doctrine.entity_managers%', $container->getDefinition('doctrine')->getArgument(2), "Set of the existing EntityManagers names is incorrect.");
 
         $def1 = $container->getDefinition('doctrine.orm.em1_metadata_driver');
         $def2 = $container->getDefinition('doctrine.orm.em2_metadata_driver');
@@ -636,8 +640,9 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
 
         $this->assertEquals(
             array('test' => 'Symfony\Bundle\DoctrineBundle\Tests\DependencyInjection\TestType'),
-            $container->getDefinition('doctrine.dbal.connection_factory')->getArgument(0)
+            $container->getParameter('doctrine.dbal.connection_factory.types')
         );
+        $this->assertEquals('%doctrine.dbal.connection_factory.types%', $container->getDefinition('doctrine.dbal.connection_factory')->getArgument(0));
     }
 
     public function testSetCustomFunctions()