2011-12-13 7 views
17

¿Cómo puedo agregar mi controlador personalizado sin modificar DriverManager.php en el núcleo de Doctrine2?Doctrine 2 - ¿Cómo agregar un controlador DBAL personalizado?

He creado un controlador DBAL para pdo_dblib y lo coloqué dentro de un paquete Symfony2. Esto funciona bien, sin embargo, debo añadir mi conductor a una lista de controladores no modificables en DriverManager.php, de lo contrario me da la siguiente excepción:

Excepción

[Doctrine\DBAL\DBALException]                                     
The given 'driver' pdo_dblib is unknown, Doctrine currently supports only the following drivers: pdo_mysql, pdo_sqlite, pdo_pgsql, pdo_oci, oci8, ibm_db2, pdo_ibm, pdo_sqlsrv 

A menos que modifico DriverManager.php

final class DriverManager 
{ 
    private static $_driverMap = array(
     'pdo_dblib' => 'Doctrine\DBAL\Driver\PDODblib\Driver', // Added this line 
    ); 
} 

Aquí es mi config.yml:

# Doctrine Configuration 
doctrine: 
    dbal: 
     driver:   pdo_dblib 
     driver_class: PDODblibBundle\Doctrine\DBAL\Driver\PDODblib\Driver 
+0

puede compartir su carpeta PDODblib como me he encontrado con este problema aswell, que también hizo ¿Se las arregla para encontrar una manera de agregar un controlador personalizado sin modificar el núcleo? – Matt

+1

No he encontrado una manera de agregar un controlador sin modificar el núcleo de Doctrine2. Sin embargo, puedes mirar el paquete en: http://github.com/trooney/PDODblibBundle – rooney

+0

Para cualquiera que vaya por esta ruta: hay commits sin aplicar PHP svn add lastInsertId y soporte de transacciones para el controlador pdo_dblib. Consulte http://svn.php.net/viewvc/php/php-src/trunk/ext/pdo_dblib/dblib_driver.c?view=log (rev. 300647 y 300647) – rooney

Respuesta

25

en realidad se puede, simplemente deje la opción de configuración del controlador completlely a cabo.

Todo lo que necesita definir es la opción de clase de controlador. El controlador solo se usa para realizar una búsqueda interna de las clases de controlador predeterminadas, siempre y cuando solo proporcione la clase, no fallará en la búsqueda.

BTW: No hay manera (en la configuración por defecto completa) para definir esto en el parameters.yml, usted tiene que cambiar directamente en el interior del config.yml

BTW: debido a otro defecto (controlador de caer volver a mysql en un área específica), no puede establecer el juego de caracteres en la configuración, ya que registrará un controlador de eventos MySql para configurar el juego de caracteres que.

Así que mi última configuración doctrina basada en mi mssql_ * implementación basada en el siguiente aspecto y funciona sin problemas:

# Doctrine Configuration 
doctrine: 
    dbal: 
     #driver: %database_driver% 
     driver_class: Doctrine\DBAL\Driver\MsSql\Driver 
     host:  %database_host% 
     port:  %database_port% 
     dbname: %database_name% 
     user:  %database_user% 
     password: %database_password% 
     #charset: UTF8 

    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     auto_mapping: true 
+1

¡Eso es exactamente lo que estaba buscando! ¡Muchas gracias! –

+1

El controlador MsSql se renombró a SQLSrv desde la versión 2.2 –