magento2 のインターセプトは magento1 のオブザーバーを置き換えますか?
-
12-12-2019 - |
質問
Magento1 でオブザーバーが使用されていたように、Magento2 で元のメソッドの動作の変更を扱う場合、インターセプトが優先される方法であることを意図していますか?
https://wiki.magento.com/display/MAGE2DOC/Using+Interception
解決
インターセプトはイベントオブザーバーに代わるものではないと思います。
Magento2 コードでディスパッチされるイベントはまだあります。
インターセプターは、メソッドの入力または出力を処理するための単なる手段です。
またはメソッドの動作 ( around
インターセプター) しかし、私が理解している限り、これは危険なアプローチです。
これはクラスの書き換えをできるだけ避けるための方法だと思います。
Magento 1.x では、メソッドの結果を変更する必要がある場合、含まれるクラスとメソッド自体をオーバーライドする必要がありました。
今、あなたは単に使うことができます before
, after
または around
データを操作するインターセプター。
オブザーバーを使用すると、メソッド全体ではなく、メソッドの特定の固定点でデータを操作できます。
私の意見では、Magento 2 であっても、可能な場合はオブザーバーを使用することがカスタマイズに最適なアプローチです。
他のヒント
傍受はイベントの進化です。その目標は、拡張ポイントについて考えることなく開発者が彼のコードを書くことを可能にすることです。
イベントを使用すると、Mage :: DispatchEvent()がカスタマイズ可能になるようにする場所について考える必要があります。
傍受によりこれについて考えることはできません。ビジネスロジックを書くだけです。すべてのメソッド呼び出しはイベントです。そのため、適切なオブジェクト指向の方法でコードを書くと、デザインによって完全にカスタマイズ可能になります。
しかし、イベントは、ビジネス言語を話すためのより高いレベルのサービスを提供します。だからイベントはマゼント2に留まります。
現在、特定のイベントを聴くオプションがまだありますが、インターセプターは単なる書き換えの代わりになることをお勧めします。私はあなたのニーズに適しているときにイベントを使うでしょう。
現在のリリースを見ると、一部のモジュールには定義を含むevents.xml
ファイルがあります。
<event name="cms_wysiwyg_images_static_urls_allowed">
<observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer" />
</event>
.