这是我在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
内调用它,它就可以了。看起来我在application.ini
中指定的PDO适配器在Bootstrap执行时尚未初始化(奇怪?)。我该怎么做才能使代码在Bootstrap中运行?是否有必要使用Zend_Db_Table :: setDefaultAdapter()创建和设置适配器;?
我在问,因为如果代码不在Bootstrap中,它需要在两个不同的地方重复,它看起来也像是属于Bootstrap。
答案 0 :(得分: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());
}