Доктрина 2 - Как добавить собственный драйвер DBAL? - PullRequest
19 голосов
/ 13 декабря 2011

Как добавить свой пользовательский драйвер без изменения DriverManager.php в ядре Doctrine2?

Я создал драйвер 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

Если я не изменяю 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

Ответы [ 2 ]

26 голосов
/ 04 января 2012

Вы на самом деле можете, просто полностью пропустите опцию конфигурации драйвера.

Все, что вам нужно определить, это опция driver_class. Драйвер используется только для внутреннего поиска для классов драйвера по умолчанию, при условии, что вы предоставляете только этот класс, он не прекратит поиск.

Кстати: нет способа (при полной настройке по умолчанию) определить это в файле settings.ini, вы должны изменить его непосредственно внутри config.yml

Кстати: из-за другого дефекта (драйвер обращается к 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
0 голосов
/ 07 апреля 2019

Вы можете использовать опцию driverClass:

$connectionParams = array(
    'driverClass' => 'YOUR_CUSTOM_CLASS_DB',   
);
$entityManager = \Doctrine\ORM\EntityManager::create($connectionParams, $config);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...