Заменяет ли перехват в magento2 наблюдателей в magento1?

9

Предназначен ли перехват как предпочтительный метод при изменении поведения оригинального метода в Magento2, как наблюдатели были в magento1?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception
Matoeil
источник

Ответы:

16

Я не думаю, что перехват предназначен для замены наблюдателей событий.
В коде Magento2 все еще есть события.

Перехватчики - это просто способ обработки ввода или вывода метода.
Или поведение метода (с использованием aroundперехватчика), но насколько я понимаю, это рискованный подход.

Я думаю, что это скорее способ избежать переписывания классов, насколько это возможно.
В Magento 1.x, если вам нужно было изменить результат метода, вам нужно переопределить содержащий класс и сам метод.
Теперь вы можете просто использовать before, afterили aroundперехватчик для манипулирования данных.

С помощью наблюдателей вы можете манипулировать данными в определенных фиксированных точках метода, а не в самом методе.

На мой взгляд, использование наблюдателей, когда это возможно, по-прежнему лучший подход для настройки даже в Magento 2.

Мариус
источник
2
Согласен. Перехват - это механизм более низкого уровня. Но это не заменяет события. Мероприятия обеспечивают интерфейс поставщика услуг более высокого уровня
Антон Крыл
6

Перехват - это эволюция событий. Его цель - позволить разработчику написать свой код, не задумываясь о точках расширения.

С событиями вы должны думать о местах, где вы делаете Mage :: dispatchEvent (), чтобы ваш модуль был настраиваемым.

Перехват позволяет не думать об этом. Вы просто пишете свою бизнес-логику. Каждый вызов метода - это событие. Поэтому, если вы напишите свой код надлежащим объектно-ориентированным способом, он будет полностью настраиваемым.

Но события предоставляют интерфейс Service Provide более высокого уровня, который говорит на деловом языке. Так что события останутся в Magento 2.

Антон Криль
источник
Не могли бы вы включить этот важный факт в devdocs как источник путаницы, особенно если учесть, что у вас все еще много событий в M2. Если мы знаем, что события мертвы, мы можем соответствующим образом кодировать, я нигде не видел, чтобы это упоминалось в документах. На других языках есть причины использовать события иногда, а перехватчики иногда, я думаю, вам нужно уточнить, что Magento 2 отличается.
Карен Бейкер
5

В настоящее время все еще есть возможность прослушивать определенные события, и я хотел бы предположить, что перехватчики - это просто замена для переписывания. Я бы все равно использовал события, когда они есть, для ваших нужд.

Если вы посмотрите на текущий выпуск, у некоторых модулей есть events.xmlфайлы, которые содержат определения.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>
Дэвид Мэннерс
источник
В Magento-2 был изменен шаблон наблюдателя последней версии. Теперь вам не нужно объявлять атрибут метода в events.xml, он будет автоматически запускать метод execute, такой же, как контроллер.
Кейур Шах