Magento 2:どの拡張メカニズムを選択しますか?


9

コントローラーを拡張するには、設定の使用とプラグインの使用の2つの方法があります。しかし、私はそれを理解していません、どちらが良いのか、そしてプラグインと比較して好みの利点/欠点です。

<preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" />

<type name="Magento\Catalog\Model\Product">
    <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/>
</type>

回答:


11

可能な限りプラグインを使用し、次にオブザーバーを使用します(それぞれの長所と短所を参照)。これにより、他の拡張機能(サードパーティモジュール)との競合を回避できます。

コアクラス/インターフェイスの実装全体をカスタムのものに置き換える必要がある場合にのみ、設定を使用する必要があります。常に1つの設定のみがアクティブであることを考慮してください(いずれかは、で定義されたシーケンスによって定義されますmodule.xml)。したがって、別の拡張機能が同じクラス/インターフェースの設定を定義すると、競合が発生します(これらの拡張機能は一緒に動作できません)。


4
  • 機能がコア機能を完全に置き換える場合は、設定を使用できます。
  • 機能をベースに追加するか、一部のクラスメソッドを部分的に置き換える場合は、プラグインを使用してください。

1
あなたはコア機能を置き換えるならば、負担はコアの更新を監視し、カスタムモジュールが最新であることを確認するために、あなたの上にあることに注意することは賢明なようだ
ロビーエーヴリル

1

補足情報:インターンm2で使用されるほとんどすべての設定は、以下のように、基本コンクリートクラスとインターフェース間の関係を維持するためだけのものです。

<preference for="Magento\Store\Model\StoreManagerInterface" type="Magento\Store\Model\StoreManager" />

あなたがケースとしてそれを一度使用すると思う:

<preference for="Magento\ImportExport\Controller\Adminhtml\Export\GetFilter" type="Magento\AdvancedPricingImportExport\Controller\Adminhtml\Export\GetFilter" />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.