Czy w Magento 2 jest jakaś pełna lista wydarzeń? Szukam czegoś takiego jak Ściągawka Magento Events (1.9)
Czy w Magento 2 jest jakaś pełna lista wydarzeń? Szukam czegoś takiego jak Ściągawka Magento Events (1.9)
Odpowiedzi:
Zestawiłem listę zdarzeń Magento 2 za pomocą
find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;
Lista jest podzielona na 2 części, jedną dla zdarzeń statycznych i jedną dla dynamiki.
Od tutaj , imprezy statyczne są te wszystkie zdarzenia zdefiniowane z pełną nazwą zdarzeń takich jak:
$this->_eventManager->dispatch('some_event');
Zdarzenia dynamiczne to wszystkie zdarzenia zdefiniowane za pomocą dynamicznie w czasie wykonywania pobranej nazwy zdarzenia, takie jak:
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
Lista znajduje się w arkuszu kalkulacyjnym dla lepszego czytania. Zostawiłem 2 linie po meczu, aby lepiej zrozumieć kontekst wydarzenia.
Tę samą listę można znaleźć w oficjalnym repozytorium Magento 2 dla_eventManager->dispatch
sales_order_save_after
przykład brakuje wydarzenia, które jest bardzo ważne dla mojego obecnego zadania, a podczas przeszukiwania repozytorium Magento 2 zauważysz, że nie ma dispatch
go wcale : github.com/magento/magento2/... Nie mam jeszcze pojęcia jak te wydarzenia są wysyłane, ale dobrze byłoby umieścić je na liście!
sales_order_save_after
(tak jak w jednym przykładzie) nie pojawia się na liście (i wyszukiwaniu), a także nie wygląda jak wydarzenie dynamiczne. A potem zastanawiałem się, czy i jak można uwzględnić takie wydarzenia, aby uzyskać bardziej kompletną listę. I oczywiście mówię tylko o Magento 2 sales_order_save_after
to wydarzenie Magento 2, o ile wiem.
Oczywiście nie jest to dobra praktyka, ale zapewniam jedno łącze, które spełniło ważne wydarzenia w Magento2
http://cyrillschumacher.com/magento2-list-of-all-dispched-events/
Oczywiście lista wydarzeń jest niekompletna, ponieważ jeśli pracujesz z Magento 1.x, logika wysyłania zdarzeń jest zachowana
lib/internal/Magento/Framework/Model/AbstractModel.php
Załaduj przed i po zdarzeniach modelu
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
$this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);
Zapisz przed i po zdarzeniach obiektu modelowego
$this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());
Kasowanie obiektu
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
$this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());
Czyszczenie obiektu
$this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
Wysyłka kontrolera
lib / internal / Magento / Framework / App / Action / Action.php
$this->_eventManager->dispatch(
'controller_action_predispatch_' . $request->getFullActionName(),
$eventParameters
);
eg // controller_action_predispatch_checkout_cart_index
$this->_eventManager->dispatch(
'controller_action_postdispatch_' . $request->getFullActionName(),
$eventParameters
);
eg // controller_action_postdispatch_checkout_cart_index
Układ renderowania zdarzeń interfejsu użytkownika
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
Kolekcje modeli
lib / internal / Magento / Framework / Model / ResourceModel / Db / Collection / AbstractCollection.php
$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', [$this->_eventObject => $this]);
$this->_eventManager->dispatch($this->_eventPrefix . '_load_after', [$this->_eventObject => $this]);
Istnieje wiele takich zdarzeń i jest to połączenie zdarzeń generowanych jawnie i niejawnie w Magento2
Odpowiedzi przede wszystkim działają świetnie, ale czasami musisz wiedzieć, jakie zdarzenia są generowane przy ładowaniu określonej strony i w jakiej kolejności.
Jest więc najlepszy sposób (moim zdaniem, aby to wiedzieć), użyj xDebug i ustaw punkt przerwania w linii 56 w klasie Magento\Framework\Event\Manager
(to jest w lib
folderze, a nie w app
folderze).
W swojej debuggera po prostu powiedzieć jej „Ocenić i log” na $eventName
zmienną i oglądać wszystkie zdarzenia wyświetlane w konsoli, jak załadować stronę.
Poleciłbym również wyłączenie opcji „Zawieś”, ponieważ może być wyrzuconych setki zdarzeń, może być konieczne pozostawienie tej opcji włączonej dla pierwszego punktu przerwania, a następnie usunięcie go.
Myślę, że to najlepszy sposób na wywołanie wszystkich zdarzeń przy ładowaniu strony, ponieważ pokaże to również wszystkie zdarzenia, które są wywoływane przez kontrolery. Każdy kontroler wywołuje zdarzenia przed i po utworzeniu nazw zawierających FullActionName, RouteName i domyślny postdispatch. Zobacz Framework\App\Action
klasę pod metodą dispatch () .
Jej trudno dostać zdarzenie wiedzieć na stronie konkretnego. Możesz więc wypróbować ten kod, aby śledzić wywoływane zdarzenia i użyć najlepszego z nich dla swoich potrzeb
/vendor/magento/framework/Event/Manager.php
dodaj ten kod pod nazwą wydarzenia
$eventName = mb_strtolower($eventName);
// Code to log all events start
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$dirList = $objectManager->get('\Magento\Framework\App\Filesystem\DirectoryList');
$logPathName = $dirList->getPath('var') . '/log/events.log';
$eventLogFile = fopen($logPathName, 'a');
fwrite($eventLogFile, $eventName . ' => ' . implode(', ', array_keys($data)) . "\n");
fclose($eventLogFile);
// Code to log all events ends
Możesz sprawdzić listę w<magentoroot>/var/log/events.log
Możesz sprawdzić poniższy link wydarzeń https://github.com/matinict/Magento-2-Events
Cierpię na to, że różni ludzie dzielą różne wydarzenia, ale moja dokładność nie straciła czasu. To tylko sztuczki, przejdź do testu sprzedawcy magento 2 itp. / event.xml, mam nadzieję, że może to być pomocne dla programisty