2012-02-08 4 views
3

Это код, который я имею в Bootstrap:Zend: Доступ к модели из 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.

ответ

9

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

Попробуйте изменить способ начальной загрузки следующим образом, чтобы вы явно загрузили ресурс 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()); 
} 
+2

+1! Дополнительная информация здесь - [Zend Application - Theory of Operation - Отслеживание зависимостей] (http://framework.zend.com/manual/en/zend.application.theory-of-operation.html#zend.application.theory-of- operation.bootstrap.dependency-tracking) – Phil

+0

Спасибо, это работает. – clime

Смежные вопросы