Quindi Magento offre 2 modi per dichiarare un osservatore. Singleton e Model (nuova istanza) specificando il <type>tag in Magento 1.xe specificando l' sharedattributo in Magento 2.
Magento 1 modo di farlo.
<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>
Versione Magento 2:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
Quindi, nel caso di Magento 1, se il <type>tag è modello o oggetto, la classe verrà istanziata con Mage::getModel(). Se singletonmanca o manca, viene istanziato usando Mage::getSingleton().
Nel caso di Magento 2, if sharedis falseallora la classe viene istanziata usando $this->_observerFactory->create() (nuova istanza).
se sharedè vero viene istanziato usando $this->_observerFactory->get()(singleton).
Tra le due versioni l'idea dell'osservatore di eventi è molto simile, ma la maggior parte degli osservatori in Magento 1 sono usati come singoli, perché typemanca il tag e in Magento 2 la maggior parte (penso tutto) degli osservatori shared="false".
Sono perplesso. Quando dovrei usare i singoli e quando dovrei usare nuove istanze per gli osservatori?
La versione di Magento (1 o 2) non è importante qui.
Un semplice caso d'uso farebbe per ogni approccio (nuova istanza o singleton)
typetag è la stessa cosa di <type>singleton</type>. Allora, qual è la ragione per cui stiamo facendo singletons osservatori?
typeaffatto l' attributo, in modo che di solito lo salti ora.