Lista wydarzeń Magento 2

Odpowiedzi:

18

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

mbalparda
źródło
Lista jest bardzo pomocna, ale wydaje się niekompletna. Na sales_order_save_afterprzykład brakuje wydarzenia, które jest bardzo ważne dla mojego obecnego zadania, a podczas przeszukiwania repozytorium Magento 2 zauważysz, że nie ma dispatchgo 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!
Jey DWork
Skąd wiesz, że nazwa zdarzenia nie istnieje? Może szukasz odpowiednika w Magento 2 o innej nazwie?
mbalparda
Nie jestem pewien, czy mówimy o tym samym. Zastanawiałem się tylko, dlaczego to wydarzenie 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_afterto wydarzenie Magento 2, o ile wiem.
Jey DWork
14

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

  1. 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());
  2. 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
  3. Układ renderowania zdarzeń interfejsu użytkownika

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. 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

huzefam
źródło
Dobry towar! Powinniśmy połączyć nasze odpowiedzi, aby mieć wszystko w jednym miejscu. Co myślisz?
mbalparda
cóż, twoja odpowiedź również jest samowystarczalna
huzefam
1

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 libfolderze, a nie w appfolderze).

W swojej debuggera po prostu powiedzieć jej „Ocenić i log” na $eventNamezmienną 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.

Punkt przerwania nazw zdarzeń 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\Actionklasę pod metodą dispatch () .

drew7721
źródło
0

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

Priyank
źródło
-1

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

matinict
źródło