Я хочу построить Doctrine 2 в ApigilityZend Framework 2 приложения.Включение панели инструментов инструментов разработчика Zend приводит к ошибкам подключения базы данных
После Marco Pivetta «ы Doctrine ORM ZF2 Tutorial, я установил не только доктрину, но и Zend Developer Tools, как в учебнике показано:
$ composer require doctrine/doctrine-orm-module
$ composer require zendframework/zend-developer-tools:dev-master
$ cp vendor/zendframework/zend-developer-tools/config/zenddevelopertools.local.php.dist config/autoload/zdt.local.php
// config/application.config.php
return array(
'modules' => array(
'Application',
...
'ZendDeveloperTools', // <-- added
'DoctrineModule', // <-- added
'DoctrineORMModule', // <-- added
),
// [...]
);
Теперь, когда я открываю страницу Apigility администратора, я получаю ошибки:
Fatal error: Uncaught exception 'Zend\Db\Adapter\Exception\InvalidArgumentException' with message 'createDriver expects a "driver" key to be present inside the parameters' in /var/www/myproject/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 909
Zend\Db\Adapter\Exception\InvalidArgumentException: createDriver expects a "driver" key to be present inside the parameters in /var/www/myproject/vendor/zendframework/zendframework/library/Zend/Db/Adapter/Adapter.php on line 262
Zend\ServiceManager\Exception\ServiceNotCreatedException: An exception was raised while creating "Zend\Db\Adapter\Adapter"; no instance returned in /var/www/myproject/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 909
Zend\ServiceManager\Exception\ServiceNotCreatedException: An exception was raised while creating "ZendDeveloperTools\DbCollector"; no instance returned in /var/www/myproject/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 909
Ошибки возникают, если для zenddevelopertools.toolbar.enabled
установлено значение true
.
Вот конфигурация в /config/autoload/global.php
:
return array(
'db' => array(
'adapters' => array(
'DB\\Customers' => array(),
'DB\\myproject_v1' => array(),
'DB\\myproject_v2' => array(),
),
),
'service_manager' => array(
'factories' => array(
'Zend\\Db\\Adapter\\Adapter' => 'Zend\\Db\\Adapter\\AdapterServiceFactory',
),
),
'zf-mvc-auth' => array(
...
),
);
и /config/autoload/local.php
выглядит следующим образом:
return array(
'db' => array(
'adapters' => array(
'DB\\Customers' => array(
'driver' => 'Pdo_Sqlite',
'database' => 'data/sqlite.db',
),
'DB\\myproject_v1' => array(
'driver' => 'Pdo_Mysql',
'database' => 'myproject_v1',
'username' => 'root',
'password' => 'pwd',
'hostname' => 'localhost',
'driver_options' => array(
1002 => 'SET NAMES \'UTF8\'',
),
),
'DB\\myproject_v2' => array(
'driver' => 'Pdo_Mysql',
'database' => 'myproject_v2',
'username' => 'root',
'password' => 'pwd',
'hostname' => 'localhost',
'driver_options' => array(
1002 => 'SET NAMES \'UTF8\'',
),
),
),
),
'zf-mvc-auth' => array(
...
),
);
Я думаю, инструменты разработчика Zend не может найти соответствующий адаптер DB.
Зачем возникают эти ошибки и как их использовать?
Дополнительная информация:
Конфигурация db.service_manager.factories.Zend\\Db\\Adapter\\Adapter
в моем global.php
на самом деле сам собой, так как я использую пользовательские DB адаптеры вместо значения по умолчанию один созданного Zend\Db\Adapter\AdapterServiceFactory
. В любом случае, Zend Developer Tools, похоже, пытается его использовать. Поэтому, когда я скопировать настройки БД непосредственно db
return array(
'db' => array(
'adapters' => array(
...
'driver' => 'Pdo_Mysql',
'username' => 'root',
'password' => 'pwd',
'hostname' => 'localhost',
'database' => 'myproject_v1',
),
),
...
);
я получаю различные ошибки:
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'username'@'localhost' (using password: YES)' in /var/www/myproject/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php on line 1070
PDOException: SQLSTATE[28000] [1045] Access denied for user 'username'@'localhost' (using password: YES) in /var/www/myproject/vendor/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php on line 43
Он работает, спасибо большое! Но ZDT не нуждается в Доктрине. Я даже отключил Doctrine ('DoctrineModule' и' DoctrineORMModule') в списке модулей 'application.config.php', и он все еще работает без него. Не могли бы вы объяснить, почему соединение с доктриной DB необходимо настроить для Zend Developer Tools? – automatix
Я думаю, что после того, как вы закомментируете модули Doctrine из приложения.config.php, ZDT больше не понадобится в конфигурации доктрины. Если это произойдет, я не знаю, почему. – dualmon
Да, вы правы. Теперь работает! Спасибо! Другая проблема заключается в том, что мои другие конфигурации соединений с БД теперь игнорируются, поэтому я не могу переключаться между версиями. Но это еще одна тема. Я начал здесь новый вопрос: http://stackoverflow.com/q/28218959/2019043 – automatix