2011-12-13 19 views
17

Come posso aggiungere il mio driver personalizzato senza modificare DriverManager.php nel core Doctrine2?Doctrine 2 - Come aggiungere un driver DBAL personalizzato?

Ho creato un driver DBAL per pdo_dblib e lo ho inserito in un pacchetto Symfony2. Questo funziona bene, però devo aggiungere il mio autista a un elenco di driver di hard-coded in DriverManager.php, altrimenti ottengo la seguente eccezione:

Eccezione

[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 meno che modifico DriverManager.php

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

Ecco la mia config.yml:

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

è possibile condividere la cartella PDODblib come ho incontrato questo problema entrava, ha fatto anche voi riesci a trovare un modo per aggiungere un driver personalizzato senza modificare il core? – Matt

+1

Non ho trovato un modo per aggiungere un driver senza modificare il core Doctrine2. Comunque puoi guardare il Bundle su: http://github.com/trooney/PDODblibBundle – rooney

+0

Per chi percorre questo percorso: Ci sono commit non applicati PHP svn aggiungi lastInsertId e supporto per le transazioni al driver pdo_dblib. Vedi http://svn.php.net/viewvc/php/php-src/trunk/ext/pdo_dblib/dblib_driver.c?view=log (rev. 300647 e 300647) – rooney

risposta

25

Si può effettivamente, basta lasciare l'opzione di configurazione del driver completlely fuori.

Tutto ciò che è necessario definire è l'opzione driver_class. Il driver viene utilizzato solo per eseguire una ricerca interna per le classi di driver predefinite, purché fornisca solo la classe, non eseguirà la ricerca.

Btw: Non c'è modo (in una configurazione di default completo) per definire questo nel parameters.ini, è necessario modificare direttamente all'interno del config.yml

Btw: a causa di un altro difetto (driver caduta torna a mysql in un'area specifica), non è possibile impostare il set di caratteri nella configurazione, poiché registrerà un gestore di eventi MySql per l'impostazione del set di caratteri di.

Quindi il mio config dottrina finale in base alla mia mssql_ * implementazione basata ha il seguente aspetto e funziona senza problemi:

# 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

Questo è esattamente quello che stavo cercando! Grazie molto! –

+1

Il driver MsSql è stato rinominato SQLSrv dalla versione 2.2 –

Problemi correlati