Entonces Magento ofrece 2 formas de declarar un observador. Singleton y Model (nueva instancia) especificando la <type>
etiqueta en Magento 1.xy especificando el shared
atributo en Magento 2.
Magento 1 forma de hacerlo.
<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>
Versión de Magento 2:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
Entonces, en el caso de Magento 1, si la <type>
etiqueta es modelo u objeto, se instanciará la clase con Mage::getModel()
. Si está singleton
o falta, se instancia usando Mage::getSingleton()
.
En el caso de Magento 2, si shared
es false
así, la clase se instancia usando $this->_observerFactory->create()
(nueva instancia).
si shared
es verdadero, se instancia usando $this->_observerFactory->get()
(singleton).
Entre las dos versiones, la idea del observador de eventos es muy similar, pero la mayoría de los observadores en Magento 1 se usan como singletons, porque type
falta la etiqueta y en Magento 2 la mayoría (creo que todos) tienen los observadores shared="false"
.
Estoy confundido. ¿Cuándo debo usar singletons y cuándo debo usar nuevas instancias para observadores?
La versión de Magento (1 o 2) no es importante aquí.
Un caso de uso simple sería adecuado para cada enfoque (nueva instancia o singleton)
type
etiqueta es lo mismo que <type>singleton</type>
. Entonces, ¿cuál es la razón por la que estamos haciendo observadores singletons?
type
atributo en absoluto, por lo que generalmente lo omito ahora.