Daher bietet Magento zwei Möglichkeiten, einen Beobachter zu deklarieren. Singleton und Model (neue Instanz) durch Angabe des <type>Tags in Magento 1.x und durch Angabe des sharedAttributs in Magento 2.
Magento 1 Art und Weise, es zu tun.
<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 Version:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
Wenn es sich bei dem <type>Tag in Magento 1 um ein Modell oder Objekt handelt, wird die Klasse mit instanziiert Mage::getModel(). Wenn es singletonfehlt oder ist, wird es mit instanziiert Mage::getSingleton().
Im Fall von Magento 2, wenn sharedist, falsewird die Klasse mit instanziiert $this->_observerFactory->create() (neue Instanz).
Wenn dies sharedzutrifft, wird es mit $this->_observerFactory->get()(Singleton) instanziiert .
Zwischen den beiden Versionen ist die Idee der Ereignisbeobachter sehr ähnlich, aber die meisten Beobachter in Magento 1 werden als Singletons verwendet, da das typeTag fehlt und in Magento 2 die meisten (ich denke alle) Beobachter shared="false".
Ich bin verwirrt. Wann sollte ich Singletons verwenden und wann sollte ich neue Instanzen für Beobachter verwenden?
Magento-Version (1 oder 2) ist hier nicht wichtig.
Ein einfacher Anwendungsfall würde für jeden Ansatz (neue Instanz oder Singleton) ausreichen.
typeTag ist dasselbe wie <type>singleton</type>. Was ist der Grund, warum wir Beobachter zu Singletons machen?
typeAttribut überhaupt zu verwenden, überspringe ich es jetzt normalerweise.