首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >原则2-如何添加自定义DBAL驱动程序?

原则2-如何添加自定义DBAL驱动程序?
EN

Stack Overflow用户
提问于 2011-12-14 00:51:18
回答 2查看 17K关注 0票数 19

如何在不修改Doctrine2内核中DriverManager.php的情况下添加自定义驱动程序?

我已经为pdo_dblib创建了一个DBAL驱动程序,并将其放在一个Symfony2包中。这可以很好地工作,但是我必须将我的驱动程序添加到DriverManager.php中的硬编码驱动程序列表中,否则我会得到以下异常:

异常

代码语言:javascript
复制
[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,否则使用

代码语言:javascript
复制
final class DriverManager
{
    private static $_driverMap = array(
        'pdo_dblib' => 'Doctrine\DBAL\Driver\PDODblib\Driver', // Added this line
    );
}

这是我的config.yml:

代码语言:javascript
复制
# Doctrine Configuration
doctrine:
    dbal:
        driver:         pdo_dblib
        driver_class:   PDODblibBundle\Doctrine\DBAL\Driver\PDODblib\Driver
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-05 02:23:45

您实际上可以,只要完全省略驱动程序配置选项即可。

您需要定义的只是driver_class选项。该驱动程序仅用于对默认驱动程序类进行内部查找,只要您只提供该类,它就不会失败。

顺便说一句:没有办法(在一个完整的默认设置中)在parameters.ini中定义它,您必须直接在config.yml中更改它

顺便说一下:由于另一个缺陷(驱动在特定区域回退到mysql ),您不能在配置中设置charset,因为它会注册一个MySql事件处理程序来设置charset than。

因此,基于我的基于mssql_*的实现,我的最终原理配置看起来如下所示,并且工作正常:

代码语言:javascript
复制
# 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
票数 28
EN

Stack Overflow用户

发布于 2019-04-08 02:05:23

您可以使用选项driverClass:

代码语言:javascript
复制
$connectionParams = array(
    'driverClass' => 'YOUR_CUSTOM_CLASS_DB',   
);
$entityManager = \Doctrine\ORM\EntityManager::create($connectionParams, $config);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8492941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档