Bladeren bron

Allow to override platform with your own by defining a service name.

Benjamin Eberlei 14 jaren geleden
bovenliggende
commit
cada317dee

+ 7 - 0
src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php

@@ -192,6 +192,13 @@ class DoctrineExtension extends AbstractDoctrineExtension
             }
         }
 
+        if (isset($connection['platform-service'])) {
+            $driverOptions['platform'] = new Reference($connection['platform-service']);
+        }
+        if (isset($connection['platform_service'])) {
+            $driverOptions['platform'] = new Reference($connection['platform_service']);
+        }
+
         $driverDef->setArguments(array(
             $driverOptions,
             new Reference(sprintf('doctrine.dbal.%s_connection.configuration', $connection['name'])),

+ 2 - 0
src/Symfony/Bundle/DoctrineBundle/Resources/config/schema/doctrine-1.0.xsd

@@ -25,6 +25,7 @@
         <xsd:attribute name="unix-socket" type="xsd:string" />
         <xsd:attribute name="memory" type="xsd:boolean" />
         <xsd:attribute name="charset" type="xsd:string" />
+        <xsd:attribute name="platform-service" type="xsd:string" />
     </xsd:complexType>
 
     <xsd:complexType name="connections">
@@ -50,6 +51,7 @@
         <xsd:attribute name="configuration-class" type="xsd:string" />
         <xsd:attribute name="event-manager-class" type="xsd:string" />
         <xsd:attribute name="wrapper-class" type="xsd:string" />
+        <xsd:attribute name="platform-service" type="xsd:string" />
     </xsd:complexType>
 
     <xsd:element name="orm" type="orm" />

+ 5 - 0
src/Symfony/Bundle/DoctrineBundle/Tests/ContainerTest.php

@@ -38,11 +38,14 @@ class ContainerTest extends TestCase
                 'default' => array(
                     'driver' => 'pdo_mysql',
                     'charset' => 'UTF-8',
+                    'platform-service' => 'my.platform',
                 )
             )
         ), $container);
         $loader->ormLoad(array('bundles' => array('YamlBundle' => array())), $container);
 
+        $container->setDefinition('my.platform', new \Symfony\Component\DependencyInjection\Definition('Doctrine\DBAL\Platforms\MySqlPlatform'));
+
         $dumper = new PhpDumper($container);
         $code = $dumper->dump(array('class' => 'DoctrineBundleTestsProjectServiceContainer'));
         eval(str_replace('<?php', null, $code));
@@ -70,5 +73,7 @@ class ContainerTest extends TestCase
         $this->assertInstanceOf('Symfony\Bundle\DoctrineAbstractBundle\Event\EventManager', $container->get('doctrine.orm.default_entity_manager.event_manager'));
         $this->assertInstanceOf('Symfony\Bundle\DoctrineAbstractBundle\Event\EventManager', $container->get('doctrine.dbal.event_manager'));
         $this->assertInstanceOf('Doctrine\DBAL\Event\Listeners\MysqlSessionInit', $container->get('doctrine.dbal.default_connection.events.mysqlsessioninit'));
+
+        $this->assertSame($container->get('my.platform'), $container->get('doctrine.dbal.default_connection')->getDatabasePlatform());
     }
 }