Symfony 3.4 LTS, PostgreSQL 10, DoctrineDBAL не удалось найти драйвер

Я использую сервер MAMP с PHP 7.1.5; Symfony Framework 3.4.2, PostgreSQL 10 для нового проекта. Я также использую PostGIS для хранения космических данных с геометрическим типом данных в PostgreSQL. Поэтому я установил и использовал: "jsor/doctrine-postgis": "^1.5"

Следующее является частью моего composer.json:

"require": {
    "php": ">=5.5.9",
    "doctrine/doctrine-bundle": "^1.6",
    "doctrine/orm": "^2.5",
    "incenteev/composer-parameter-handler": "^2.0",
    "jsor/doctrine-postgis": "^1.5",
    "sensio/distribution-bundle": "^5.0.19",
    "sensio/framework-extra-bundle": "^5.0.0",
    "symfony/monolog-bundle": "^3.1.0",
    "symfony/polyfill-apcu": "^1.0",
    "symfony/swiftmailer-bundle": "^2.6.4",
    "symfony/symfony": "3.4.*",
    "twig/twig": "^1.0||^2.0"

Parameters.yml:

server_ver: 10.0
database_driver: pdo_pgsql
database_host: localhost
database_port: 5432
database_name: qtqg
database_path:     ~
database_user: postgres
database_password: admin

The config.yml:

doctrine:
dbal:
    default_connection: default
    connections:
        default:
            mapping_types:
                _text: string
            server_version: %server_ver%
            driver:   %database_driver%
            host:     %database_host%
            port:     %database_port%
            dbname:   %database_name%
            path:     %database_path%
            user:     %database_user%
            password: %database_password%
            persistent: true
            charset:  UTF8
            logging: %kernel.debug%
            profiling: %kernel.debug%

    # if using pdo_sqlite as your database driver:
    #   1. add the path in parameters.yml
    #     e.g. database_path: '%kernel.project_dir%/var/data/data.sqlite'
    #   2. Uncomment database_path in parameters.yml.dist
    #   3. Uncomment next line:
    #path: '%database_path%'
    types:
        geography:
            class: 'Jsor\Doctrine\PostGIS\Types\GeographyType'
            commented: false
        geometry:
            class: 'Jsor\Doctrine\PostGIS\Types\GeometryType'
            commented: false
        raster:
            class: 'Jsor\Doctrine\PostGIS\Types\RasterType'
            commented: false

Все работает хорошо, я могу использовать cmd для создания Entity:

php bin/console doctrine:mapping:import --force AppBundle annotation

И после этого генерируем CRUD:

php bin/console generate:doctrine:crud AppBundleMonitoringAdminBundle:coquan -n --format=annotation --with-write

Запуск PHP - это PHP 7.1.5, и я также проверил файл php.ini в C:\Windows и загрузил php.ini на сервер MAMP. php -m команда показывает:

PDO
pdo_mysql
PDO_ODBC
pdo_pgsql
pdo_sqlite

Я не думаю, что какие-либо проблемы с драйвером данных, потому что он может подключаться и генерировать сущности, CRUD.... Но после генерации CRUD и попытки доступа к контроллеру для вывода списка всех элементов в одну сущность, я получил ошибку:

An exception occurred in driver: could not find driver

Одна из строк ошибки:

AbstractPostgreSQLDriver->convertException('An exception occurred in driver: could not find driver', object(PDOException)) in vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php (line 176) 

Я пробовал много способов, включая изменение mamp на xamp, wamp server, все рекомендации по настройке dbal... но ошибка все еще есть

Кто-нибудь может мне помочь!

2 ответа

Проблема с PostgreSQL 10

внутри vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/PostgreSqlSchemaManager.php линия линия 292 изменить

$data = $this->_conn->fetchAll('SELECT min_value, increment_by FROM ' . $this->_platform->quoteIdentifier($sequenceName));

За

$version = floatval($this->_conn->getWrappedConnection()->getServerVersion());

if ($version >= 10) {
   $data = $this->_conn->fetchAll('SELECT min_value, increment_by FROM pg_sequences WHERE schemaname = \'public\' AND sequencename = '.$this->_conn->quote($sequenceName));
}
else
{
    $data = $this->_conn->fetchAll('SELECT min_value, increment_by FROM ' . $this->_platform->quoteIdentifier($sequenceName));
}

У меня была такая же проблема с Postgres 9.6.4 с WAMP на Windows 10

phpinfo() будет отображать pdo_pgsql как загруженный, и он работал нормально в другом приложении PHP. php -m из гитбаша не показывай pdo_pgsql

В конце мне пришлось отредактировать загруженный php.ini и раскомментировать эти 2 строки

extension=php_pdo_pgsql.dll
extension=php_pgsql.dll

перезагрузите apache и теперь он работает!!!!

Другие вопросы по тегам