В Magento 2 есть концепция плагинов / перехватов / перехватчиков, в отличие от Magento 1.
Они действуют как событие перед | после события для каждого открытого метода. Что приятно.
Вы также можете использовать around
плагин, чтобы заменить функциональность метода.
Но Magento 2 все еще предлагает возможность переписать классы более или менее способом M1.
Я хотел бы увидеть некоторые примеры, где переписывание классов - это путь вместо использования плагинов.
Я знаю, что это полезно, когда вы хотите изменить поведение основного защищенного метода, но есть ли другие случаи, когда переписывание рекомендуется или необходимо?
17
Ответы:
Очевидная причина использовать перезапись вместо плагина, когда вам нужно переопределить закрытый, защищенный или финальный метод .
Но также рассмотрим следующие сценарии.
1-й сценарий (абсолютный порядок сортировки):
Переписывание может быть полезно, когда вам нужно, чтобы ваш код запускался перед плагинами . Я знаю, что вы можете сделать это, установив плагин
sortOrder
, но вы не можете быть уверены, что ваш код всегда будет первым, когда кто-то (не вы) собирается установить сторонние компоненты.2-й сценарий (исключите код):
Если вам нужно исключить или переписать только часть кода в методе, плагин может быть неоптимальным способом. Я знаю, что вы можете использовать
around
плагин и избегать вызоваproceed
, но это может сломать другие плагины в стеке.3-й сценарий (стиль кода):
Вы должны использовать перезапись, когда вам нужно переписать поведение, плагины должны использоваться для изменения вывода или выполнения кода до / после.
Плагин, всегда должен запускать оригинальный код, чтобы не сломать другие модули.
Мой вывод:
Если вы можете рассматривать основной метод как черный ящик с входом и одним выходом, и вы не осведомлены о его внутренних механизмах, тогда плагин может быть лучшим вариантом.
Если вам нужно изменить внутреннее поведение , лучшим вариантом будет перезапись.
источник
Отличный вопрос, я задал себе то же самое на днях, и вот что я придумал:
Источник: Magento U Фундаментальный курс
источник