这是我在 Bootstrap 中的代码:
public function _initRegistry()
{
$systemConfigModel = new Application_Model_DbTable_SystemConfig();
Zend_Registry::set('config', $systemConfigModel->getSystemConfig());
}
这是我得到的一个异常(exception):
( ! ) 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
中调用它,它就可以正常工作。看起来我在 application.ini
中指定的 PDO 适配器在执行 Bootstrap 时尚未初始化(奇怪?)。我应该怎么做才能使代码在 Bootstrap 中工作?是否需要用 Zend_Db_Table::setDefaultAdapter(); 创建和设置适配器?
我问是因为如果代码不在 Bootstrap 中,则需要在两个不同的地方复制它,而且它看起来也属于 Bootstrap。
最佳答案
您是对的,在引导期间,您的数据库的 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());
}
关于exception - Zend : Accessing model from Bootstrap raises an exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9202077/