我已经在这里阅读了大量的线程和谷歌,由于某种原因,我仍然不明白单身人士与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>
答案 0 :(得分:4)
如果模型已经实例化,则singleton将返回实例,否则将创建一个新实例。非常方便,因为在某些情况下,您不想创建另一个要创建的实例(例如配置,订单,报价等)。
答案 1 :(得分:2)
来自http://codemagento.com/2011/04/observers-and-dispatching-events/:
<type>
- 我一直使用单身,但其他选项也可以 “模型”或“对象”。 “singleton”将创建对象as Mage :: getSingleton()虽然“对象”和“模型”都将使用 创建观察者对象时的Mage :: getModel()。
因此,如果在脚本执行期间多次调用您的观察者,则在单例的情况下,您可以在第一个观察者调用中将某些数据保存(“缓存”)在私有/受保护变量中,并在下次调用时使用它。例如,您可以缓存某些大查询,外部Web服务调用响应等的结果。