Тож Magento пропонує 2 способи оголошення спостерігача. Singleton та Model (новий екземпляр), вказавши <type>
тег у Magento 1.x та вказавши shared
атрибут у Magento 2.
Magento 1 спосіб зробити це.
<events>
<event_name>
<observers>
<unique_observer_name>
<type>model|object|singleton|null</type>
<class>class/alias_here</class>
<method>methdNameHere</method>
</unique_observer_name>
</observers>
</event_name>
</events>
Версія Magento 2:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
Так, у випадку Magento 1, якщо <type>
тег є моделлю чи об'єктом, клас буде інстанціюватися Mage::getModel()
. Якщо він є singleton
або його немає, його миттєво використовують Mage::getSingleton()
.
У випадку Magento 2, якщо shared
є, false
то клас інстанціюється за допомогою $this->_observerFactory->create()
(новий екземпляр).
якщо shared
це правда, він використовується миттєво, використовуючи $this->_observerFactory->get()
(синглтон).
Між двома версіями ідея спостерігача за подіями дуже схожа, але більшість спостерігачів у Magento 1 використовуються як одиночні кнопки, оскільки type
мітка відсутня, а в Magento 2 - більшість (я думаю, всіх) спостерігачів shared="false"
.
Я спантеличений. Коли я повинен використовувати одиночні і коли слід використовувати нові екземпляри для спостерігачів?
Версія Magento (1 або 2) тут не важлива.
Простий варіант використання застосовується для кожного підходу (новий екземпляр або одиночний)
type
тег не те саме, що <type>singleton</type>
. Тож чому ми робимо спостерігачів одиночними?
type
атрибут, щоб я зазвичай пропускав його зараз.