2015-01-28 5 views
1

Я хочу построить 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 

ответ

4

Вы только показывая Db конфиги. Вы нуждаетесь в Doctrine конфигурации что-то вроде этого:

<?php 
return array(
    'doctrine' => array(
     'connection' => array(
      // default connection name 
      'orm_default' => array(
       'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver', 
       'params' => array(
        'host'  => 'localhost', 
        'port'  => '3306', 
        'user'  => 'username', 
        'password' => 'password', 
        'dbname' => 'database', 
       ) 
      ) 
     ) 
    ), 
); 

См https://github.com/doctrine/DoctrineORMModule/blob/master/README.md

+0

Он работает, спасибо большое! Но ZDT не нуждается в Доктрине. Я даже отключил Doctrine ('DoctrineModule' и' DoctrineORMModule') в списке модулей 'application.config.php', и он все еще работает без него. Не могли бы вы объяснить, почему соединение с доктриной DB необходимо настроить для Zend Developer Tools? – automatix

+1

Я думаю, что после того, как вы закомментируете модули Doctrine из приложения.config.php, ZDT больше не понадобится в конфигурации доктрины. Если это произойдет, я не знаю, почему. – dualmon

+0

Да, вы правы. Теперь работает! Спасибо! Другая проблема заключается в том, что мои другие конфигурации соединений с БД теперь игнорируются, поэтому я не могу переключаться между версиями. Но это еще одна тема. Я начал здесь новый вопрос: http://stackoverflow.com/q/28218959/2019043 – automatix