Заменяет ли перехват в magento2 наблюдателей в magento1?
-
12-12-2019 - |
Вопрос
Предполагается ли, что перехват будет предпочтительным методом при изменении поведения исходного метода в Magento2, как это было с наблюдателями в magento1?
https://wiki.magento.com/display/MAGE2DOC/Using+Interception
Решение
Я не думаю, что перехват призван заменить наблюдателей за событиями.
В коде Magento2 по-прежнему отправляются события.
Перехватчики — это всего лишь способ обработки входных или выходных данных метода.
Или поведение метода (с использованием around
перехватчик), но насколько я понимаю, это рискованный подход.
Я думаю, что это скорее способ избежать переписывания классов, насколько это возможно.
В Magento 1.x, если вам нужно было изменить результат метода, вам нужно было переопределить содержащий его класс и сам метод.
теперь вы можете просто использовать before
, after
или around
перехватчики для манипулирования данными.
С помощью наблюдателей вы можете манипулировать данными в определенных фиксированных точках метода, а не во всем методе.
По моему мнению, использование наблюдателей, когда это возможно, по-прежнему является лучшим подходом для настройки даже в Magento 2.
Другие советы
Перехват - это эволюция событий.Его цель - позволить разработчику написать свой код, не думая о точках расширения.
С событиями, которые вы должны подумать о местах, где вы делаете Mage :: DispatchEvent (), чтобы ваш модуль будет настраиваться.
Перехват позволяет вам не думать об этом.Вы просто пишете свою бизнес-логику.Каждый вызов метода - это событие.Поэтому, если вы пишете свой код в правильном объектно-ориентированном способе, он будет полностью настраиваться по дизайну.
Но события предоставляют услуги более высокого уровня, предоставляют интерфейс, который разговаривает деловой язык.Итак, события останутся в Magento 2.
В настоящее время все еще есть возможность прослушивать определенные события, и я бы предположил, что перехватчики это просто замена для перезаписи.Я бы все еще использовал события, когда есть на месте для ваших нужд.
Если вы посмотрите на текущий выпуск, некоторые модули имеют файлы events.xml
, которые включают определения.
<event name="cms_wysiwyg_images_static_urls_allowed">
<observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer" />
</event>
.