如何在不修改Doctrine2核心中的DriverManager.php的情况下添加自定义驱动程序?
我为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 :(得分:26)
你实际上可以,只需完全保留驱动程序配置选项。
您需要定义的是driver_class选项。驱动程序仅用于对默认驱动程序类进行内部查找,只要您只提供类,它就不会失败进行查找。
顺便说一句:没有办法(在完整的默认设置中)在parameters.ini中定义它,你必须直接在config.yml中更改它
Btw:由于另一个缺陷(驱动程序在特定区域回到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
答案 1 :(得分:0)
您可以使用选项driverClass:
$connectionParams = array(
'driverClass' => 'YOUR_CUSTOM_CLASS_DB',
);
$entityManager = \Doctrine\ORM\EntityManager::create($connectionParams, $config);