magento2のインターセプトはmagento1のオブザーバーを置き換えますか?


9

オブザーバーがmagento1にいたときにMagento2の元のメソッドの動作を変更する場合、インターセプトは推奨される方法ですか?

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

回答:


16

傍受はイベントオブザーバーに代わるものではないと思います。
Magento2コードでディスパッチされるイベントがまだあります。

インターセプターは、メソッドの入力または出力を処理するための単なる方法です。
または、メソッドの動作(aroundインターセプターを使用)ですが、私が理解しているところから、これは危険なアプローチです。

クラスの書き換えをできるだけ回避する方法だと思います。
Magento 1.xでは、メソッドの結果を変更する必要がある場合、それを含むクラスとメソッド自体をオーバーライドする必要がありました。
これでbeforeafterまたはaroundインターセプターを使用してデータを操作できます。

オブザーバーを使用すると、メソッド全体ではなく、メソッドの特定の固定点でデータを操作できます。

私の意見では、可能な場合はオブザーバーを使用することは、Magento 2でもカスタマイズのための最良のアプローチです。


2
同意します。傍受は低レベルのメカニズムです。ただし、イベントの代わりにはなりません。イベントは、より高いレベルのサービスプロバイダーインターフェイスを提供します
Anton Kril

6

傍受はイベントの進化です。その目標は、開発者が拡張ポイントを考慮せずに自分のコードを記述できるようにすることです。

イベントでは、モジュールをカスタマイズできるように、Mage :: dispatchEvent()を行う場所について考える必要があります。

傍受により、これについて考える必要がなくなります。あなたはあなたのビジネスロジックを書くだけです。すべてのメソッド呼び出しはイベントです。したがって、適切なオブジェクト指向の方法でコードを記述した場合、設計により完全にカスタマイズ可能になります。

しかし、イベントはビジネス言語を話すより高いレベルのサービス提供インターフェースを提供します。したがって、イベントはMagento 2に留まります。


特にM2にはまだ多くのイベントがあるため、混乱の原因としてdevdocsでこの重要な事実を理解していただけますか。イベントが死んでいることがわかっている場合は、それに応じてコーディングできますが、ドキュメントでこれについて言及しているところは見たことがありません。他の言語では、イベントを使用したり、インターセプターを使用したりする理由があります。Magento2が異なることを明確にする必要があると思います。
Karen Baker

5

現在、特定のイベントをリッスンするオプションはまだあります。インターセプターは書き換えの代わりにすぎないことをお勧めします。あなたのニーズに合ったイベントがある場合でも、私はイベントを使用します。

現在のリリースを見ると、一部のモジュールevents.xmlには定義を含むファイルがあります。

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>

Magento-2では、最新バージョンのオブザーバーパターンが変更されています。events.xmlでメソッド属性を宣言する必要はありません。コントローラと同じように、executeメソッドを自動的に実行します。
Keyur Shah
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.