2011-12-13 32 views
17

如何在不修改Doctrine2內核中的DriverManager.php的情況下添加自定義驅動程序?Doctrine 2 - 如何添加自定義DBAL驅動程序?

我爲pdo_dblib創建了一個DBAL驅動程序,並將它放在Symfony2包中。這工作得很好,但我必須將驅動程序添加到DriverManager.php硬編碼驅動程序的列表,否則我得到以下異常:

異常

[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 

除非我修改DriverManager.php

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

這裏是我的config.yml:

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

你可以分享你PDODblib文件夾中我遇到這個問題藏漢,也沒有你設法找到一種方法來添加自定義驅動程序而不修改核心? – Matt

+1

我還沒有找到添加驅動程序而不修改Doctrine2核心的方法。不過你可以看看這個Bundle:http://github.com/trooney/PDODblibBundle – rooney

+0

對於任何人走這條路:有沒有應用提交PHP svn add lastInsertId和事務支持到pdo_dblib驅動程序。請參閱http://svn.php.net/viewvc/php/php-src/trunk/ext/pdo_dblib/dblib_driver.c?view=log(rev。300647和300647) – rooney

回答

25

實際上,你可以,只要把驅動程序配置選項completlely出來。

所有你需要定義的是driver_class選項。該驅動程序只用於對默認驅動程序類進行內部查找,只要您僅提供該類,則不會因查找而失敗。

順便說一句:有沒有辦法(在一個完整的默認設置)在parameters.ini來定義這一點,你必須直接改變它的config.yml內

BTW:由於另一個缺陷(司機下降回到特定區域的mysql),你可能不會在配置中設置字符集,因爲它將註冊一個MySql事件處理程序來設置字符集。

所以我最後的學說配置基於我mssql_ *基於實現如下所示,沒有問題的作品:

# 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

這就是我正在尋找的!非常感謝! –

+1

自版本2.2開始,MsSql驅動程序已重命名爲SQLSrv –

相關問題