Zend: доступ к модели из Bootstrap вызывает исключение - PullRequest
3 голосов
/ 09 февраля 2012

Это код, который у меня есть в Bootstrap:

public function _initRegistry()
{
    $systemConfigModel = new Application_Model_DbTable_SystemConfig();
    Zend_Registry::set('config', $systemConfigModel->getSystemConfig());
}

И это исключение, которое я получаю:

( ! ) Fatal error: Uncaught exception 'Zend_Db_Table_Exception' with message 'No adapter found for Application_Model_DbTable_SystemConfig' in /usr/share/php5/Zend/Db/Table/Abstract.php on line 755
( ! ) Zend_Db_Table_Exception: No adapter found for Application_Model_DbTable_SystemConfig in /usr/share/php5/Zend/Db/Table/Abstract.php on line 755

Это прекрасно работает, если я вызываю его в моем BaseController.Похоже, что адаптер PDO, который я указываю в application.ini, не был инициализирован во время выполнения Bootstrap (странно?).Что я должен сделать, чтобы код работал в Bootstrap?Нужно ли создавать и устанавливать адаптер с помощью Zend_Db_Table :: setDefaultAdapter ();?

Я спрашиваю, потому что, если код не находится в Bootstrap, его нужно дублировать в двух разных местах, и это тожепохоже, он принадлежит Bootstrap.

1 Ответ

9 голосов
/ 09 февраля 2012

Вы правы, во время начальной загрузки ресурс Zend Application для вашей базы данных еще не был инициализирован.

Попробуйте изменить метод начальной загрузки следующим образом, чтобы явно запустить ресурс db.

public function _initRegistry()
{
    $this->bootstrap('db'); // Bootstrap the db resource from configuration

    $db = $this->getResource('db'); // get the db object here, if necessary

    // now that you have initialized the db resource, you can use your dbtable object
    $systemConfigModel = new Application_Model_DbTable_SystemConfig();
    Zend_Registry::set('config', $systemConfigModel->getSystemConfig());
}
...