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 shared
Attributs 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 singleton
fehlt oder ist, wird es mit instanziiert Mage::getSingleton()
.
Im Fall von Magento 2, wenn shared
ist, false
wird die Klasse mit instanziiert $this->_observerFactory->create()
(neue Instanz).
Wenn dies shared
zutrifft, 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 type
Tag 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.
type
Tag ist dasselbe wie <type>singleton</type>
. Was ist der Grund, warum wir Beobachter zu Singletons machen?
type
Attribut überhaupt zu verwenden, überspringe ich es jetzt normalerweise.