Donc, Magento propose 2 façons de déclarer un observateur. Singleton et Model (nouvelle instance) en spécifiant la <type>
balise dans Magento 1.x et l' shared
attribut dans Magento 2.
Magento 1 façon de le faire.
<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>
Version Magento 2:
<event name="event_name">
<observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" />
</event>
Ainsi, dans le cas de Magento 1, si la <type>
balise est un modèle ou un objet, la classe sera instanciée avec Mage::getModel()
. Si c'est singleton
ou il manque, il est instancié en utilisant Mage::getSingleton()
.
Dans le cas de Magento 2, si shared
est false
alors la classe est instanciée en utilisant $this->_observerFactory->create()
(nouvelle instance).
si shared
est vrai, il est instancié en utilisant $this->_observerFactory->get()
(singleton).
L'idée d'observateur d'événement est très similaire entre les deux versions, mais la plupart des observateurs de Magento 1 sont utilisés en tant que singletons, car la type
balise est manquante et dans Magento 2, la plupart des observateurs (je pense tous) l'ont fait shared="false"
.
Je suis perplexe. Quand devrais-je utiliser des singletons et quand devrais-je utiliser de nouvelles instances pour les observateurs?
La version Magento (1 ou 2) n’est pas importante ici.
Un cas d'utilisation simple ferait pour chaque approche (nouvelle instance ou singleton)
type
balise n'est la même chose que <type>singleton</type>
. Alors, quelle est la raison pour laquelle nous faisons les observateurs singletons?
type
attribut du tout, je le passe généralement maintenant.