Explorar o código

[DoctrineBundle] Changed and simplified dbalLoad() slightly. Made logging explicit with a configuration variable to avoid tons of unnecessary method calls in prod. environment.

Benjamin Eberlei %!s(int64=14) %!d(string=hai) anos
pai
achega
22f6307053

+ 12 - 14
src/Symfony/Bundle/DoctrineBundle/DependencyInjection/DoctrineExtension.php

@@ -41,11 +41,11 @@ class DoctrineExtension extends AbstractDoctrineExtension
      */
     public function dbalLoad(array $configs, ContainerBuilder $container)
     {
-        $config = $this->mergeDbalConfig($configs);
-        
         $loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
         $loader->load('dbal.xml');
 
+        $config = $this->mergeDbalConfig($configs);
+
         $container->setAlias('database_connection', sprintf('doctrine.dbal.%s_connection', $config['default_connection']));
         $container->setParameter('doctrine.dbal.default_connection', $config['default_connection']);
 
@@ -84,11 +84,10 @@ class DoctrineExtension extends AbstractDoctrineExtension
             'wrapper-class'         => 'wrapperClass', // doctrine conv.
             'charset'               => 'charset',
         );
-        $supportedConfigParams = array(
-            'configuration-class'   => 'configuration_class',
+        $supportedContrainerParams = array(
             'platform-service'      => 'platform_service',
-            'configuration_class'   => 'configuration_class',
-            'platform_service'      => 'platform_service'
+            'platform_service'      => 'platform_service',
+            'logging'               => 'logging',
         );
         $mergedConfig = array(
             'default_connection'  => 'default',
@@ -102,10 +101,7 @@ class DoctrineExtension extends AbstractDoctrineExtension
                 'password'            => null,
                 'port'                => null,
             ),
-            'container' => array(
-                'configuration_class' => 'Doctrine\DBAL\Configuration',
-                'wrapper_class'       => null,
-            ),
+            'container' => array(),
         );
 
         foreach ($configs AS $config) {
@@ -136,8 +132,8 @@ class DoctrineExtension extends AbstractDoctrineExtension
                 foreach ($connection AS $k => $v) {
                     if (isset($supportedConnectionParams[$k])) {
                         $mergedConfig['connections'][$connectionName]['driver'][$supportedConnectionParams[$k]] = $v;
-                    } else if (isset($supportedConfigParams[$k])) {
-                        $mergedConfig['connections'][$connectionName]['container'][$supportedConfigParams[$k]] = $v;
+                    } else if (isset($supportedContrainerParams[$k])) {
+                        $mergedConfig['connections'][$connectionName]['container'][$supportedContrainerParams[$k]] = $v;
                     }
                 }
             }
@@ -154,9 +150,11 @@ class DoctrineExtension extends AbstractDoctrineExtension
      */
     protected function loadDbalConnection(array $connection, ContainerBuilder $container)
     {
-        $containerDef = new Definition($connection['container']['configuration_class']);
+        $containerDef = new Definition($container->getParameter('doctrine.dbal.configuration_class'));
         $containerDef->setPublic(false);
-        $containerDef->addMethodCall('setSQLLogger', array(new Reference('doctrine.dbal.logger')));
+        if (isset($connection['logging']) && $connection['logging']) {
+            $containerDef->addMethodCall('setSQLLogger', array(new Reference('doctrine.dbal.logger')));
+        }
         $container->setDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $connection['name']), $containerDef);
 
         $driverOptions = $connection['driver'];

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

@@ -6,14 +6,14 @@
 
     <parameters>
         <parameter key="doctrine.dbal.default_connection">default</parameter>
-        <parameter key="doctrine.dbal.connection_class">Doctrine\DBAL\Connection</parameter>
         <parameter key="doctrine.dbal.logger.debug_class">Doctrine\DBAL\Logging\DebugStack</parameter>
         <parameter key="doctrine.dbal.logger_class">Symfony\Bundle\DoctrineBundle\Logger\DbalLogger</parameter>
+        <parameter key="doctrine.dbal.configuration_class">Doctrine\DBAL\Configuration</parameter>
         <parameter key="doctrine.data_collector.class">Symfony\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector</parameter>
-        <parameter key="doctrine.dbal.default_connection">default</parameter>
         <parameter key="doctrine.dbal.event_manager_class">Doctrine\Common\EventManager</parameter>
         <parameter key="doctrine.dbal.events.mysql_session_init.class">Doctrine\DBAL\Event\Listeners\MysqlSessionInit</parameter>
         <parameter key="doctrine.dbal.events.oracle_session_init.class">Doctrine\DBAL\Event\Listeners\OracleSessionInit</parameter>
+        <parameter key="doctrine.dbal.logging">false</parameter>
     </parameters>
 
     <services>

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

@@ -25,10 +25,9 @@
         <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="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:attribute name="logging" type="xsd:boolean" default="false" />
     </xsd:complexType>
 
     <xsd:complexType name="connections">
@@ -51,10 +50,9 @@
         <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="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:attribute name="logging" type="xsd:boolean" default="false" />
     </xsd:complexType>
 
     <xsd:element name="orm" type="orm" />

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

@@ -119,7 +119,6 @@ abstract class AbstractDoctrineExtensionTest extends TestCase
         $loader->dbalLoad(array(array()), $container);
         $loader->ormLoad(array(array('mappings' => array('YamlBundle' => array()))), $container);
 
-        $this->assertEquals('Doctrine\DBAL\Connection', $container->getParameter('doctrine.dbal.connection_class'));
         $this->assertEquals('Doctrine\ORM\Configuration', $container->getParameter('doctrine.orm.configuration_class'));
         $this->assertEquals('Doctrine\ORM\EntityManager', $container->getParameter('doctrine.orm.entity_manager_class'));
         $this->assertEquals('Proxies', $container->getParameter('doctrine.orm.proxy_namespace'));