Doctrine 2 - 如何添加自定义DBAL驱动程序?

roo*_*ney 19 php symfony doctrine-orm

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

我已经创建了一个DBAL驱动程序pdo_dblib并将其放在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
Run Code Online (Sandbox Code Playgroud)

除非我修改DriverManager.php

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

这是我的config.yml:

# Doctrine Configuration
doctrine:
    dbal:
        driver:         pdo_dblib
        driver_class:   PDODblibBundle\Doctrine\DBAL\Driver\PDODblib\Driver
Run Code Online (Sandbox Code Playgroud)

pfe*_*igl 27

你实际上可以,只需完全保留驱动程序配置选项.

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

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

顺便说一句:由于另一个缺陷(驱动程序在特定区域回退到mysql),您可能无法在配置中设置charset,因为它将注册一个MySql事件处理程序来设置charset而不是.

所以基于我的基于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
Run Code Online (Sandbox Code Playgroud)

  • 自版本2.2起,MsSql驱动程序已重命名为SQLSrv。 (2认同)