2011-12-13 16 views
17

Jak mogę dodać niestandardowy sterownik bez modyfikowania DriverManager.php w rdzeniu Doctrine2?Doctrine 2 - Jak dodać niestandardowy sterownik DBAL?

Utworzono sterownik DBAL dla pdo_dblib i umieściłem go w pakiecie Symfony2. Działa to dobrze, jednak muszę dodać mój sterownik do listy zakodowane kierowców w DriverManager.php, w przeciwnym razie pojawia się następujący wyjątek:

wyjątek

[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 

ile zmodyfikować DriverManager.php

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

Oto mój config.yml:

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

można udostępniać folder PDODblib jak Natknąłem tej kwestii aswell, też prawda udaje się znaleźć sposób na dodanie niestandardowego sterownika bez modyfikowania rdzenia? – Matt

+1

Nie znalazłem sposobu na dodanie sterownika bez modyfikowania jądra Doctrine2. Możesz jednak spojrzeć na Pakiet pod adresem: http://github.com/trooney/PDODblibBundle – rooney

+0

Dla każdego, kto podąża tą ścieżką: Istnieją niezastosowane zatwierdzenia PHP svn dodaje obsługę lastInsertId i transakcji do sterownika pdo_dblib. Zobacz http://svn.php.net/viewvc/php/php-src/trunk/ext/pdo_dblib/dblib_driver.c?view=log (rev. 300647 i 300647) – rooney

Odpowiedz

25

rzeczywiście może po prostu zostawić opcję konfiguracji sterownika completlely zewnątrz.

Wszystko, co musisz zdefiniować, to opcja driver_class. Sterownik jest używany tylko do wewnętrznego sprawdzania domyślnych klas sterowników, o ile tylko podajesz klasę, nie powiedzie się niepowodzenie podczas wyszukiwania.

Btw: Nie ma sposobu (w pełnej konfiguracji domyślnej), aby określić to w parameters.ini, trzeba zmienić go bezpośrednio wewnątrz config.yml

Btw: ze względu na inny defekt (kierowca spada z powrotem do mysql w określonym obszarze), możesz nie ustawić zestawu znaków w konfiguracji, ponieważ zarejestruje to program obsługi zdarzeń MySql w celu ustawienia zestawu znaków.

Więc moja ostateczna doktryna config w oparciu o moje mssql_ * realizacja oparta wygląda następująco i działa bez problemów:

# 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

Tego właśnie szukałem! Wielkie dzięki! –

+1

Sterownik MsSql został przemianowany na SQLSrv od wersji 2.2 –

Powiązane problemy