我为Magento项目创建了一个自定义模块。该模块适用于Magento 1.6.X。但是我在Magento 1.3.2.4版本中安装此扩展程序。 Magento抛出错误。
dbModel read resource does not implement Zend_Db_Adapter_Abstract
许多论坛讨论了这个问题。但不幸的是。我没有得到任何结果。
我清除缓存,重新编制索引。我还应该做些什么来解决这个问题。
Var 文件夹权限已设置为 777 。即使我尝试了新的Magento安装,但同样的错误。
先谢谢。
答案 0 :(得分:9)
在我的情况下,只是帮助 清除MAGENTO_ROOT / var / cache /目录下的文件/目录解决了这个问题。
dbModel read resource does not implement Zend_Db_Adapter_Abstract
答案 1 :(得分:5)
对于该版本的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()。
如果你的config.xml中没有指定一个连接,1.6.x将返回默认的读/写连接:
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的实例。
答案 2 :(得分:2)
无论dbModel是什么类,它都需要实现Zend_Db_Adapter_Abstract。这就是所谓的界面。如果你想了解更多接口是什么,我会在这里看看它是如何与PHP相关的(http://php.net/manual/en/language.oop5.interfaces.php)
所以基本上无论dbModel是什么,你需要确保它的类定义在类名后面包含“implements Zend_Db_Adapter_Abstract”。
不知道你想要用你的模块完成什么,我可以告诉你(基本上解释错误)。我怀疑dbModel是一个核心Magento对象,如果是这种情况,我相信你会陷入两个版本的Magento之间的不兼容。
但是,如果dbModel是您的某个类,则将实现添加到类定义中应清除错误。