Как я могу добавить свой собственный драйвер без изменения 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
Фактически вы можете просто оставить опцию конфигурации драйвера окончательно.
Все, что вам нужно определить, это параметр driver_class. Драйвер используется только для внутреннего поиска для классов драйвера по умолчанию, если только вы предоставляете только класс, он не подведет поиск.
Btw: Нет способа (в полной настройке по умолчанию), чтобы определить это в параметрах.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