L'interception dans magento2 remplace-t-elle les observateurs dans magento1?

9

L'interception est-elle censée être la méthode préférée lorsqu'il s'agit de modifier le comportement d'une méthode originale dans Magento2 comme les observateurs l'étaient dans magento1?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception
Matoeil
la source

Réponses:

16

Je ne pense pas que l'interception vise à remplacer les observateurs d'événements.
Il y a encore des événements distribués dans le code Magento2.

Les intercepteurs ne sont qu'un moyen de traiter l'entrée ou la sortie d'une méthode.
Ou le comportement d'une méthode (utilisant l' aroundintercepteur) mais d'après ce que je comprends, c'est une approche risquée.

Je pense que c'est plus un moyen d'éviter autant que possible les réécritures de classe.
Dans Magento 1.x, si vous aviez besoin de modifier le résultat d'une méthode, vous deviez remplacer la classe qui contient et la méthode elle-même.
Maintenant , vous pouvez simplement utiliser before, afterou aroundintercepteurs pour manipuler les données.

Avec les observateurs, vous pouvez manipuler des données dans certains points fixes d'une méthode, pas la méthode complète elle-même.

À mon avis, l'utilisation d'observateurs lorsque cela est possible est toujours la meilleure approche pour la personnalisation, même dans Magento 2.

Marius
la source
2
Se mettre d'accord. L'interception est un mécanisme de niveau inférieur. Mais cela ne remplace pas les événements. Les événements fournissent une interface de fournisseur de services de niveau supérieur
Anton Kril
6

L'interception est l'évolution des événements. Son objectif est de permettre à un développeur d'écrire son code sans penser aux points d'extension.

Avec les événements, vous devez penser aux endroits où vous faites Mage :: dispatchEvent () pour que votre module soit personnalisable.

L'interception vous permet de ne pas y penser. Vous écrivez simplement votre logique métier. Chaque appel de méthode est un événement. Donc, si vous écrivez votre code de manière orientée objet, il sera entièrement personnalisable par conception.

Mais les événements fournissent une interface de service supérieure qui parle le langage des affaires. Les événements resteront donc dans Magento 2.

Anton Kril
la source
Pouvez-vous s'il vous plaît obtenir ce fait important dans les devdocs comme une source de confusion, d'autant plus que vous avez encore de nombreux événements dans M2. Si nous savons que les événements sont morts, nous pouvons coder en conséquence, je n'ai vu aucun endroit qui le mentionne dans les documents. Dans d'autres langues, il y a des raisons d'utiliser des événements parfois et des intercepteurs d'autres fois, je pense que vous devez clarifier que Magento 2 est différent.
Karen Baker,
5

Actuellement, il y a toujours la possibilité d'écouter des événements spécifiques et je dirais que les intercepteurs ne sont qu'un remplacement pour les réécritures. J'utiliserais toujours les événements quand il y en a un pour vos besoins.

Si vous regardez la version actuelle, certains modules ont des events.xmlfichiers qui incluent les définitions.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>
David Manners
la source
Dans Magento-2, le modèle d'observateur de la dernière version a été modifié.Maintenant, vous n'avez pas besoin de déclarer l'attribut de méthode dans events.xml, il exécutera automatiquement la méthode d'exécution, comme le contrôleur.
Keyur Shah