Відповіді:
Я не думаю, що перехоплення покликане замінити спостерігачів подій.
У коді 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>