1

我在这里和谷歌上阅读了大量的线程,出于某种原因,我仍然不太了解单例与 Magento 的关系。例如,我创建了一个观察者来监听订单保存事件并执行一些自定义逻辑。根据我在另一个线程中收到的建议,我的班级是单身人士。我怎么知道这是正确的?它可能是单例以外的东西吗?

 <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

如果模型已经实例化,单例将返回实例,否则将创建一个新实例。非常方便,因为在某些情况下您不想创建另一个要创建的实例(例如配置、订单、报价等)。

于 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 回答