dbModel 读取资源未在 Magento ver 1.3.2.4 中实现Zend_Db_Adapter_Abstra



我为我的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 是您的类之一,则将实现添加到您的类定义中应该会清除错误。

最新更新