Ersetzt das Abfangen in Magento2 Beobachter in Magento1?

9

Ist das Abfangen die bevorzugte Methode, wenn es darum geht, das Verhalten einer ursprünglichen Methode in Magento2 zu ändern, während Beobachter in Magento1 waren?

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

Antworten:

16

Ich denke nicht, dass das Abfangen Ereignisbeobachter ersetzen soll.
Im Magento2-Code werden noch Ereignisse ausgelöst.

Die Interceptors sind nur eine Möglichkeit, die Eingabe oder Ausgabe einer Methode zu verarbeiten.
Oder das Verhalten einer Methode (unter Verwendung des aroundInterceptors), aber soweit ich weiß, ist dies ein riskanter Ansatz.

Ich denke, es ist eher eine Möglichkeit, Klassenumschreibungen so weit wie möglich zu vermeiden.
Wenn Sie in Magento 1.x das Ergebnis einer Methode ändern mussten, mussten Sie die enthaltene Klasse und die Methode selbst überschreiben.
jetzt können Sie einfach verwenden before, afteroder aroundAbfangjäger , die Daten zu manipulieren.

Mit Beobachtern können Sie Daten an bestimmten Fixpunkten einer Methode bearbeiten, nicht an der vollständigen Methode.

Meiner Meinung nach ist die Verwendung von Beobachtern nach Möglichkeit auch in Magento 2 der beste Ansatz für die Anpassung.

Marius
quelle
2
Zustimmen. Das Abfangen ist ein Mechanismus auf niedrigerer Ebene. Es ersetzt jedoch keine Ereignisse. Veranstaltungen bieten eine übergeordnete Schnittstelle für Dienstanbieter
Anton Kril
6

Abfangen ist die Evolution von Ereignissen. Ziel ist es, einem Entwickler das Schreiben seines Codes zu ermöglichen, ohne an Erweiterungspunkte zu denken.

Bei Ereignissen müssen Sie über Orte nachdenken, an denen Sie Mage :: dispatchEvent () ausführen, damit Ihr Modul anpassbar ist.

Durch das Abfangen können Sie nicht darüber nachdenken. Sie schreiben einfach Ihre Geschäftslogik. Jeder Methodenaufruf ist ein Ereignis. Wenn Sie Ihren Code also objektorientiert schreiben, kann er vom Design her vollständig angepasst werden.

Ereignisse bieten jedoch eine übergeordnete Service Provide-Schnittstelle, die die Geschäftssprache spricht. Die Veranstaltungen bleiben also in Magento 2.

Anton Kril
quelle
Können Sie bitte diese wichtige Tatsache in den Devdocs als Quelle der Verwirrung betrachten, insbesondere da Sie noch viele Ereignisse in M2 haben? Wenn wir wissen, dass Ereignisse tot sind, können wir entsprechend codieren. Ich habe nirgendwo etwas gesehen, das dies in Dokumenten erwähnt. In anderen Sprachen gibt es Gründe, Ereignisse manchmal und Abfangjäger manchmal zu verwenden. Ich denke, Sie müssen klarstellen, dass Magento 2 anders ist.
Karen Baker
5

Derzeit besteht immer noch die Möglichkeit, bestimmte Ereignisse anzuhören, und ich würde vorschlagen, dass die Interceptors nur ein Ersatz für das Umschreiben sind. Ich würde die Ereignisse immer noch nutzen, wenn es eines für Ihre Bedürfnisse gibt.

Wenn Sie sich die aktuelle Version ansehen, haben einige Module events.xmlDateien, die die Definitionen enthalten.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>
David Manners
quelle
In Magento-2 wurde das Beobachtermuster der neuesten Version geändert. Jetzt müssen Sie das Methodenattribut in events.xml nicht deklarieren. Es wird automatisch die Ausführungsmethode ausgeführt, genau wie der Controller.
Keyur Shah