MongoDB ODMをMagentoに接続する


15

Mongo Doctrine ODMをMagentoに接続しようとしています。zendとmongodbを正常に接続しました。両方を接続する方法がわかりません。Mongodb odmをmagentoの「lib」フォルダーに配置しましたが、libをmagentoにリンクする問題があります。ライブラリの基本クラスを「インクルード」しようとしています。しかし、ライブラリには多くの名前空間が含まれています。magentoが名前空間をサポートするとは思わない。そのため、エラーが表示されます。。ヘルプは大歓迎です。前もって感謝します。

回答:


4

これは、Magentoがクラスを読み込む方法に関連する非常に良い質問だと思います。

Magentoファイルを変更せずにそれを修正する良い方法はありません。

したがって、主な問題はlib / Varien / Autoload.phpにあります。

public function autoload($class)
{
    if ($this->_collectClasses) {
        $this->_arrLoadedClasses[self::$_scope][] = $class;
    }
    if ($this->_isIncludePathDefined) {
        $classFile =  COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class;
    } else {
        $classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
    }
    $classFile.= '.php';
    return include $classFile;
}

Varien_Autoload::autoload -このメソッドは、「Pearの命名規則」に従うクラスのみをロードできます- Mage_Core_Model_Config

ただし、名前空間を使用$classする場合はMage\\Core\\Model\\Config

したがって、もう1つチェックを追加して、名前空間の問題を修正できます。

public function autoload($class)
{
    if ($this->_collectClasses) {
        $this->_arrLoadedClasses[self::$_scope][] = $class;
    }
    if ($this->_isIncludePathDefined) {
        $classFile =  COMPILER_INCLUDE_PATH . DIRECTORY_SEPARATOR . $class;
    } else if (strpos($class, "\\") !== false) {
        $classFile = str_replace("\\", DIRECTORY_SEPARATOR, $class);
    } else {
        $classFile = str_replace(' ', DIRECTORY_SEPARATOR, ucwords(str_replace('_', ' ', $class)));
    }
    $classFile.= '.php';
    return include $classFile;
}

名前空間を使用するライブラリを使用できるようになりました。

また、ここであなたは、Magentoのでの使用の名前空間へのコードの変更のリストを見つけるでしょう。


Olekssi、私はこれを試しました。動いていない。私はこれをまっすぐに言っています。混乱させたくありません。ドクトリンODMを使用して、magentoをmongoに接続できますか。あなたは私と一緒に、してくださいシェア任意のアイデアを持っている場合...
サンダー

3

これらのアプローチを試してみて、単一のmagentoセットアップで2つの個別のデータベースを使用することができました。

そのためには、構成を作成する必要があります。以下の手順に従ってください。

app/etc/modules

<?xml version="1.0"?>
<config>
    <modules>
        <Deph_Externaldb>
            <active>true</active>
            <codePool>local</codePool>
        </Deph_Externaldb>
    </modules>
</config>

app/code/local、ここで以下のデータベースの詳細を更新してください

<?xml version="1.0"?>
<config>
    <modules>
        <Deph_Externaldb>
            <version>0.1.0</version>
        </Deph_Externaldb>
    </modules>
    <global>
        <resources>
            <externaldb_write>
                <connection>
                    <use>externaldb_database</use>
                </connection>
            </externaldb_write>
            <externaldb_read>
                <connection>
                    <use>externaldb_database</use>
                </connection>
            </externaldb_read>
            <externaldb_setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </externaldb_setup>
            <externaldb_database>
                <connection>
                    <host><![CDATA[localhost]]></host>
                    <username><![CDATA[db_username]]></username>
                    <password><![CDATA[db_password]]></password>
                    <dbname><![CDATA[db_name]]></dbname>
                    <model>mysql4</model>
                    <type>pdo_mysql</type>
                    <active>1</active>
                </connection>
            </externaldb_database>
        </resources>
    </global>
</config>

設定の準備ができたら、以下の接続文字列を使用してdbにアクセスします

<?php

    $resource   = Mage::getSingleton('core/resource');
    $conn       = $resource->getConnection('externaldb_read');
    $results    = $conn->query('SELECT * FROM tblName');

    print_r($results)

mongodb構成でそのアプローチを使用できるかどうか知っていますか?like:<document_db> <connection_string> <![CDATA [mongodb:// localhost:27017 /]]> </ connection_string> <dbname> <![CDATA [db]]> </ dbname> </ document_db>
s_h
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.