3

Magentoプロジェクト用のカスタムモジュールを作成しました。このモジュールはMagento1.6.Xで動作します。しかし、私はこの拡張機能をMagentoバージョン1.3.2.4にインストールしています。Magentoは以下のエラーをスローします。

dbModel read resource does not implement Zend_Db_Adapter_Abstract

多くのフォーラムがこの問題について議論しました。しかし残念ながら。結果が出ません。

キャッシュをクリアし、インデックスを再作成しました。これを解決するために他に何をすべきですか。

Varフォルダのアクセス許可は777に設定されています。Magentoの新規インストールを試しましたが、同じエラーが発生しました。

前もって感謝します。

4

3 に答える 3

9

私の場合、MAGENTO_ROOT / var /cache/ディレクトリの下のファイル/ディレクトリをクリアすることで問題が解決しました。

dbModel読み取りリソースはZend_Db_Adapter_Abstractを実装していません

于 2013-01-10T14:17:31.113 に答える
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のインスタンスではないためです。

于 2012-05-07T21:10:39.997 に答える
2

dbModelのクラスが何であれ、Zend_Db_Adapter_Abstractを実装する必要があります。これはインターフェースと呼ばれるものです。インターフェイスとは何かをもっと知りたい場合は、ここでPHPとの関連を確認します(http://php.net/manual/en/language.oop5.interfaces.php)

したがって、基本的にdbModelが何であれ、そのクラス定義にクラス名の後に「implementsZend_Db_Adapter_Abstract」が含まれていることを確認する必要があります。

モジュールで何を達成しようとしているのかわからなくても、私が言えることはほぼすべてです(基本的にエラーを説明します)。私はdbModelがコアMagentoオブジェクトであると疑っています。その場合、2つのバージョンのMagento間の非互換性に巻き込まれていると思います。

ただし、dbModelがクラスの1つである場合は、クラス定義に実装を追加するとエラーが解消されます。

于 2012-05-02T10:54:30.850 に答える