Magento 2: Какой механизм расширения выбрать?

9

Мы можем расширить контроллер двумя способами: используя настройки и используя плагин. Но я не понимаю, что является хорошим и преимущества / недостатки предпочтения по сравнению с плагином.

<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>
Ананд Онтигери
источник
Возможный дубликат Magento 2: плагин против наблюдателя
7очг

Ответы:

11

По возможности используйте плагины, а затем наблюдателей (см. Плюсы и минусы каждого ), это позволит вам избежать конфликтов с другими расширениями (сторонними модулями).

Предпочтение следует использовать, только если вся базовая реализация класса / интерфейса должна быть заменена пользовательской. Учтите, что в любое время активен только один параметр (который определен последовательностью, определенной в module.xml), поэтому, если другое расширение определяет предпочтение для того же класса / интерфейса, возникнет конфликт (эти расширения не могут работать вместе).

Алекс Палиаруш
источник
4
  • Если ваша функциональность полностью заменяет основную функциональность, вы можете использовать настройки.
  • Если вы хотите добавить функциональность в базу или частично заменить какой-либо метод класса, используйте плагины.
Канди
источник
1
Кажется благоразумным отметить, что если вы замените базовую функциональность, тогда вам придется следить за обновлениями ядра и следить за тем, чтобы ваши пользовательские модули были обновлены
Робби Аверилл,
1

дополнительная информация: почти все предпочтения, используемые в intern 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" />
Ibnab
источник