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

时间:2012-04-28 10:19:26

标签: magento magento-1.3

我为Magento项目创建了一个自定义模块。该模块适用于Magento 1.6.X。但是我在Magento 1.3.2.4版本中安装此扩展程序。 Magento抛出错误。

dbModel read resource does not implement Zend_Db_Adapter_Abstract

许多论坛讨论了这个问题。但不幸的是。我没有得到任何结果。

我清除缓存,重新编制索引。我还应该做些什么来解决这个问题。

Var 文件夹权限已设置为 777 。即使我尝试了新的Magento安装,但同样的错误。

先谢谢。

3 个答案:

答案 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是您的某个类,则将实现添加到类定义中应清除错误。