Antworten:
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 around
Interceptors), 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
, after
oder around
Abfangjä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.
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.
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.xml
Dateien, die die Definitionen enthalten.
<event name="cms_wysiwyg_images_static_urls_allowed">
<observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer" />
</event>