1

この問題に関する投稿がたくさんあることは知っていますが、それぞれに異なるルーツがあると思います(少なくとも私がチェックしたものから-何も助けにはなりませんでした)。

ユーザーがボタンをクリックするとイベントを発生させようとしていますが、ブラウザの警告で上記の例外が発生しMage registry key "_singleton/" already existsます。

config.xml の一部:

.....
     <models>
        <packagecustomernumber>
            <class>Package_CustomerNumber_Model</class>
        </packagecustomernumber>
    </models>

</global>
<frontend>
        <events>
            <checkout_type_onepage_save_order>
                <observers>
                    <type>singleton</type>
                    <class>packageName/customernumber/observer</class>
                    <method>setCustomerNumber</method>
                </observers>
            </checkout_type_onepage_save_order>
        </events>
    </frontend>

そしてクラス自体:

class Package_CustomerNumber_Model_Observer
{
    public function setCutomerNumber($observer)
    {
        die('setCutomerNumber');
    }
}

注文のチェックアウト/保存でも起動するボタンなので、イベントは正しいはずです。

助言がありますか ?

4

3 に答える 3

8

最初に飛び出すのはこれ

<class>packageName/customernumber/observer</class>

それは無効です。これは、オブザーバーに使用するクラスを Magento に伝えるノードです。そのため、<class/>ノードはオブザーバーの完全な PHP クラス名のいずれかである必要があります。

<class>Package_CustomerNumber_Model_Observer</class>

またはモデルのクラスエイリアス

<class>packagecustomernumber/observer</class>

また、オブザーバーを実行する前に、モデル クラスをインスタンス化できることを確認すると役立ちます。Magento をロードした環境 (スクリプト、コントローラー アクション、phtmlテンプレートなど)で次のコードを実行してみてください。

$model = new Package_CustomerNumber_Model_Observer;
var_dump(get_class($model));

$model = Mage::getModel('packagecustomernumber/observer');
var_dump(get_class($model));

クラスをインスタンス化できない場合、Magento もインスタンス化できません (オブザーバーをトリガーするいくつかの手順を実行する前に、最初にこれをテストする方が簡単です)。

于 2013-10-02T17:14:22.913 に答える
0

config.xml モデル セクションに含まれていることを確認してください

        <!-- This says that string 'company_module' corresponds to Company_Module_Model pseudo-namespace in getModel() and getSingleton() calls. -->
        <company_module>
            <class>Company_Module_Model</class>
        </company_module>

そうしないと、新しいモデル インスタンスを作成できません。

于 2017-10-04T09:18:26.020 に答える