我为我的Magento项目创建了一个自定义模块。该模块适用于 Magento 1.6.X .但是当我在Magento版本中安装此扩展程序时 1.3.2.4 .Magento抛出下面的错误。
dbModel read resource does not implement Zend_Db_Adapter_Abstract
许多论坛讨论了这个问题。但不幸的是。我没有得到任何结果。
我清除了缓存,重新索引。我还应该怎么做才能解决这个问题。
Var 文件夹权限设置为 777。即使我尝试了新的Magento安装,但同样的错误。
提前谢谢。
就我而言,只是帮助清除 MAGENTO_ROOT/var/cache/目录下的文件/目录解决了该问题。
dbModel 读取资源未实现Zend_Db_Adapter_Abstract
对于该版本的Magento(1.3.2.4),您需要在config.xml文件中指定读写连接。
在 <global>
下,添加一个<resources>
节点,如下所示:
<resources>
<yourModelNode_write>
<connection>
<use>core_write</use>
</connection>
</yourModelNode_write>
<yourModelNode_read>
<connection>
<use>core_write</use>
</connection>
</yourModelNode_read>
</resources>
确保刷新缓存!
这种类型的配置在Magento的更高版本中是可选的;如果您未在配置中指定默认读/写连接,系统将加载它们。我不确定此功能是何时实现的,但它存在于 1.6.x 中。
1.3.2.4 和 1.6.x 之间的区别位于 Mage_Core_Model_Resource::getConnection() 中。
如果您的配置中未指定读/写连接,1.6.x 将返回默认读/写连接.xml:
Mage_Core_Model_Resource::getConnection()
$connConfig = Mage::getConfig()->getResourceConnectionConfig($name);
if (!$connConfig) {
$this->_connections[$name] = $this->_getDefaultConnection($name);
return $this->_connections[$name];
}
1.3.2.4 将返回 false:
$connConfig = Mage::getConfig()->getResourceConnectionConfig($name);
if (!$connConfig || !$connConfig->is('active', 1)) {
return false;
}
您收到"不实现Zend_Db_Adapter_Abstract"错误的原因位于 Varien_Data_Collection_Db::setConnection():
public function setConnection($conn)
{
if (!$conn instanceof Zend_Db_Adapter_Abstract) {
throw new Zend_Exception('dbModel read resource does not implement Zend_Db_Adapter_Abstract');
}
$this->_conn = $conn;
$this->_select = $this->_conn->select();
}
当false
作为连接($conn)传入时,它会抛出此错误,因为 - 当然 - false
不是Zend_Db_Adapter_Abstract的实例。
无论dbModel是什么类,它都需要实现Zend_Db_Adapter_Abstract。这就是所谓的接口。如果你想了解更多什么是接口,我会看看这里看看它与PHP的关系(http://php.net/manual/en/language.oop5.interfaces.php)
所以基本上无论dbModel是什么,你都需要确保它的类定义在类名后面包含"实现Zend_Db_Adapter_Abstract"。
不知道你想用你的模块完成什么,这就是我能告诉你的(基本上解释错误)。我怀疑dbModel是一个核心的Magento对象,如果是这种情况,我相信你陷入了Magento的两个版本之间的不兼容。
但是,如果 dbModel 是您的类之一,则将实现添加到您的类定义中应该会清除错误。