1

Ive read tons of threads on here and google and for some reason I still dont really understand what singletons are in relation to Magento. For example I created an observer that listens for an order save event and does some custom logic. Per the advice I received in another thread I have my class as singleton. How do I know this is correct? Could it be something other than singleton?

 <frontend>
    <events>
        <checkout_type_onepage_save_order_after>
            <observers>
                <reducesetinventory_save_order_observer>
                    <class>MyModule_ReduceSetInventory_Model_Observer</class>
                    <method>checkout_type_onepage_save_order_after</method>
                    <type>singleton</type>
                </reducesetinventory_save_order_observer>
            </observers>
        </checkout_type_onepage_save_order_after>
    </events>
</frontend>
<global>
    <models>
        <myname_reducesetinventory>
            <class>MyName_ReduceSetInventory_Model_Observer</class>
        </myname_reducesetinventory>
    </models>
</global>
4

2 に答える 2

4

モデルがすでにインスタンス化されている場合、singleton はインスタンスを返します。それ以外の場合は、新しいインスタンスを作成します。別のインスタンスを作成したくない場合があるため、非常に便利です (例: config、order、quote など)。

于 2012-06-27T17:46:15.163 に答える
2

http://codemagento.com/2011/04/observers-and-dispatching-events/から:

<type>-私は常にシングルトンを使用していますが、他のオプションは「モデル」または「オブジェクト」にすることができます。"singleton" は Mage::getSingleton() としてオブジェクトを作成しますが、"object" と "model" の両方がオブザーバー オブジェクトの作成時に Mage::getModel() を使用します。

したがって、シングルトンの場合、スクリプトの実行中にオブザーバーが数回呼び出されると、最初のオブザーバー呼び出しでプライベート/保護された変数にデータを保存 (「キャッシュ」) し、次の呼び出しで使用できます。たとえば、大きなクエリの結果、外部 Web サービス呼び出しの応答などをキャッシュできます。

于 2012-06-27T17:58:25.070 に答える