Чи перехоплення в магенто2 замінює спостерігачів у магенто1?


9

Чи перехоплення призначене бути кращим методом, коли стосуються зміни поведінки оригінального методу в Magento2, оскільки спостерігачі були в magento1?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception

Відповіді:


16

Я не думаю, що перехоплення покликане замінити спостерігачів подій.
У коді Magento2 все ще є події.

Перехоплювачі - це лише спосіб обробляти вхід або вихід методу.
Або поведінка методу (за допомогою aroundперехоплювача), але, наскільки я це розумію, це ризикований підхід.

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

За допомогою спостерігачів ви можете маніпулювати даними в певних фіксованих точках методу, а не самого повного методу.

На мою думку, використання спостерігачів, коли це можливо, все ще є найкращим підходом для налаштування навіть у Magento 2.


2
Погодьтеся. Перехоплення - це механізм нижнього рівня. Але це не замінює події. Події надають інтерфейс постачальника послуг вищого рівня
Антон Криль,

6

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

З подіями ви повинні думати про місця, де ви робите Mage :: dispatchEvent (), щоб ваш модуль був налаштований.

Перехоплення дозволяє не думати про це. Ви просто пишете свою логіку бізнесу. Кожен виклик методу - це подія. Отже, якщо ви пишете свій код належним чином об’єктно-орієнтованим способом, він буде повністю налаштований дизайном.

Але події забезпечують інтерфейс надання більш високого рівня, який говорить діловою мовою. Тож події залишаться у 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 ,, такий же, як контролер.
Кейгур Шах
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.