Тож 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атрибут, щоб я зазвичай пропускав його зараз.