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: Plugin vs Observer
7ochem

Відповіді:


11

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

Перевагу слід використовувати лише в тому випадку, якщо вся реалізація класу / інтерфейсу повинна бути замінена користувацьким. Враховуйте, що лише одне уподобання є активним у будь-який час (яке визначається послідовністю, визначеною в module.xml), тому якщо інше розширення визначає перевагу для того ж класу / інтерфейсу, виникне конфлікт (ці розширення не можуть працювати разом).


4
  • Якщо ваша функціональність повністю замінить основну функціональність, то ви можете скористатися налаштуваннями.
  • Якщо ви хочете додати функціонал до бази або частково замінити якийсь метод класу, то будь ласка, використовуйте плагіни.

1
Здається доцільним зауважити, що якщо ви заміните основні функціональні можливості, на вас лежить тягар, щоб стежити за оновленнями основних ядер та забезпечити, щоб ваші користувацькі модулі були оновлені
Robbie Averill

1

додаткові відомості: майже всі переваги, що використовуються в інтерні м2, це лише для збереження зв'язку між базовим бетонним класом та інтерфейсом, наприклад:

<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.