Предназначен ли перехват как предпочтительный метод при изменении поведения оригинального метода в Magento2, как наблюдатели были в magento1?
https://wiki.magento.com/display/MAGE2DOC/Using+Interception
источник
Предназначен ли перехват как предпочтительный метод при изменении поведения оригинального метода в Magento2, как наблюдатели были в magento1?
https://wiki.magento.com/display/MAGE2DOC/Using+Interception
Я не думаю, что перехват предназначен для замены наблюдателей событий.
В коде Magento2 все еще есть события.
Перехватчики - это просто способ обработки ввода или вывода метода.
Или поведение метода (с использованием around
перехватчика), но насколько я понимаю, это рискованный подход.
Я думаю, что это скорее способ избежать переписывания классов, насколько это возможно.
В Magento 1.x, если вам нужно было изменить результат метода, вам нужно переопределить содержащий класс и сам метод.
Теперь вы можете просто использовать before
, after
или around
перехватчик для манипулирования данных.
С помощью наблюдателей вы можете манипулировать данными в определенных фиксированных точках метода, а не в самом методе.
На мой взгляд, использование наблюдателей, когда это возможно, по-прежнему лучший подход для настройки даже в Magento 2.
Перехват - это эволюция событий. Его цель - позволить разработчику написать свой код, не задумываясь о точках расширения.
С событиями вы должны думать о местах, где вы делаете Mage :: dispatchEvent (), чтобы ваш модуль был настраиваемым.
Перехват позволяет не думать об этом. Вы просто пишете свою бизнес-логику. Каждый вызов метода - это событие. Поэтому, если вы напишите свой код надлежащим объектно-ориентированным способом, он будет полностью настраиваемым.
Но события предоставляют интерфейс Service Provide более высокого уровня, который говорит на деловом языке. Так что события останутся в Magento 2.
источник
В настоящее время все еще есть возможность прослушивать определенные события, и я хотел бы предположить, что перехватчики - это просто замена для переписывания. Я бы все равно использовал события, когда они есть, для ваших нужд.
Если вы посмотрите на текущий выпуск, у некоторых модулей есть
events.xml
файлы, которые содержат определения.источник