Czy przechwytywanie w magento2 zastępuje obserwatorów w magento1?

9

Czy przechwytywanie ma być preferowaną metodą w przypadku zmiany zachowania oryginalnej metody w Magento2, tak jak obserwatorzy w Magento1?

https://wiki.magento.com/display/MAGE2DOC/Using+Interception
Matoeil
źródło

Odpowiedzi:

16

Nie sądzę, aby przechwytywanie miało zastąpić obserwatorów zdarzeń.
Nadal są zdarzenia wysyłane w kodzie Magento2.

Przechwytywacze to tylko sposób na przetworzenie danych wejściowych lub wyjściowych metody.
Lub zachowanie metody (przy użyciu aroundprzechwytywacza), ale z tego, co rozumiem, jest to ryzykowne podejście.

Myślę, że jest to raczej sposób na uniknięcie przepisywania klas w jak największym stopniu.
W Magento 1.x, jeśli trzeba było zmodyfikować wynik metody, trzeba było przesłonić klasę zawierającą i samą metodę.
Teraz możesz po prostu użyć before, afterlub aroundprzechwytujących do manipulowania danymi.

Za pomocą obserwatorów możesz manipulować danymi w określonych stałych punktach metody, a nie w samej metodzie pełnej.

Moim zdaniem używanie obserwatorów, gdy jest to możliwe, jest nadal najlepszym podejściem do dostosowywania nawet w Magento 2.

Marius
źródło
2
Zgodzić się. Przechwytywanie to mechanizm niższego poziomu. Ale to nie zastępuje wydarzeń. Wydarzenia zapewniają interfejs dostawcy usług wyższego poziomu
Anton Kril,
6

Przechwytywanie to ewolucja wydarzeń. Jego celem jest umożliwienie programistom napisania swojego kodu bez myślenia o punktach rozszerzenia.

W przypadku zdarzeń musisz pomyśleć o miejscach, w których wykonujesz Mage :: dispatchEvent (), aby Twój moduł można było dostosować.

Przechwytywanie pozwala ci o tym nie myśleć. Po prostu piszesz swoją logikę biznesową. Każde wywołanie metody jest zdarzeniem. Więc jeśli napiszesz swój kod we właściwy sposób obiektowy, będzie on w pełni konfigurowalny z założenia.

Jednak wydarzenia zapewniają wyższy poziom interfejsu zapewniającego obsługę, który mówi w języku biznesowym. Wydarzenia pozostaną w Magento 2.

Anton Kril
źródło
Czy możesz zdobyć ten ważny fakt w devdocs, ponieważ jest on źródłem zamieszania, zwłaszcza że wciąż masz wiele wydarzeń w M2. Jeśli wiemy, że zdarzenia są martwe, możemy odpowiednio zakodować, nie widziałem nigdzie o tym w dokumentach. W innych językach istnieją powody, by czasami używać zdarzeń, a innym razem przechwytywaczy. Myślę, że musisz wyjaśnić, że Magento 2 jest inny.
Karen Baker,
5

Obecnie nadal istnieje opcja odsłuchiwania określonych wydarzeń i sugerowałbym, że przechwytywacze są tylko zamiennikiem przepisywania. Nadal korzystałbym z wydarzeń, kiedy jest jedno na twoje potrzeby.

Jeśli spojrzysz na bieżącą wersję, niektóre moduły mają events.xmlpliki zawierające definicje.

<event name="cms_wysiwyg_images_static_urls_allowed">
    <observer name="catalog_wysiwyg" instance="Magento\Catalog\Model\Observer"  />
</event>
David Manners
źródło
W najnowszej wersji Magento-2 wzorzec obserwatora został zmieniony. Teraz nie musisz deklarować atrybutu metody w events.xml ,, Automatycznie uruchomi metodę wykonywania ,, podobnie jak kontroler.
Keyur Shah,