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>

Ответы:


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" />
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.