Quindi Magento offre 2 modi per dichiarare un osservatore. Singleton e Model (nuova istanza) specificando il <type>
tag in Magento 1.xe specificando l' shared
attributo 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 singleton
manca o manca, viene istanziato usando Mage::getSingleton()
.
Nel caso di Magento 2, if shared
is false
allora 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é type
manca 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)
type
tag è la stessa cosa di <type>singleton</type>
. Allora, qual è la ragione per cui stiamo facendo singletons osservatori?
type
affatto l' attributo, in modo che di solito lo salti ora.