Список подій Magento 2


Відповіді:


18

Я зібрав список Magento 2 подій з використанням

find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;

Список розділений на 2 частини, одну для статичних подій та одну для динаміки.

Від тут , статичні події все ті події , визначені з повним ім'ям події , як:

$this->_eventManager->dispatch('some_event');

Динамічні події - це всі події, визначені за допомогою динамічно, під час виконання, вилученої назви події, наприклад:

$this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);

Список знаходиться в електронній таблиці для кращого читання. Після матчу я залишив 2 рядки для кращого розуміння контексту події.

Той же список можна знайти пошуком в офіційному Magento 2 репо для_eventManager->dispatch


Список дуже корисний, але здається неповним. Подія, sales_order_save_afterнаприклад, яка є досить важливою для мого поточного завдання, відсутня, і при пошуку Magento 2 repo ви помітите, що для неї взагалі немає dispatch: github.com/magento/magento2/… Я ще не маю уявлення як розсилаються ці події, але було б чудово включити їх у список!
Jey DWork

Звідки ви знаєте, що його події не існує? Можливо, ви шукаєте еквівалент у Magento 2 з іншою назвою?
mbalparda

Не впевнений, чи говоримо ми про те саме. Мені було просто цікаво, чому подія sales_order_save_after(так само як один приклад) не входить у список (і пошук), а також не схожа на динамічну подію. І тоді я думав, чи можна і як можна включати такі події, щоб отримати більш повний список. І явно я говорю лише про Magento 2 sales_order_save_after- це подія Magento 2, наскільки я можу сказати.
Jey DWork

14

Очевидно, що це не дуже хороша практика, але я надаю одне посилання, яке відповідало важливим подіям в Magento2

http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/

Звичайно, список подій неповний, так як якщо б ви працювали з Magento 1.x, логіка відправки подій зберігається

  1. lib/internal/Magento/Framework/Model/AbstractModel.php Завантажуйте до і після подій моделі

    $this->_eventManager->dispatch($this->_eventPrefix . '_load_before', $params);
    $this->_eventManager->dispatch($this->_eventPrefix . '_load_after', $params);

    Збережіть до і після подій модельного об'єкта

    $this->_eventManager->dispatch($this->_eventPrefix . '_save_before', $this->_getEventData());
    $this->_eventManager->dispatch($this->_eventPrefix . '_save_after', $this->_getEventData());

    Видалення об'єкта

    $this->_eventManager->dispatch($this->_eventPrefix . '_delete_before', $this->_getEventData());
    $this->_eventManager->dispatch($this->_eventPrefix . '_delete_after', $this->_getEventData());

    Очищення об'єкта

    $this->_eventManager->dispatch($this->_eventPrefix . '_clear', $this->_getEventData());
  2. Відправлення контролера

    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. Макет Frontend відображає події

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. Колекції моделей

    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]);

Таких подій багато, і це поєднання явно та неявно породжених подій у Magento2


Хороший матеріал! Ми повинні об'єднати наші відповіді, щоб все було в одному місці. Що ти думаєш?
mbalparda

ну і ваша відповідь є самодостатньою
huzefam

1

Відповіді, перш за все, чудово працюють, але іноді потрібно знати, які події викидаються на певне завантаження сторінки та порядок, у який вони кидаються.

Тож ось найкращий спосіб (на мою думку, щоб це знати), використовувати xDebug і встановити точку перерви на рядку 56 у класі Magento\Framework\Event\Manager(це в libпапці, а не в appпапці).

В вашому отладчике просто сказати йому «Оцінка і увійти» в $eventNameзмінну і подивитися всі події будуть відображатися в консолі , як при завантаженні сторінки.

Я також рекомендую вимкнути параметр "Призупинити", оскільки може бути сто подій, кинутих, можливо, вам доведеться залишити його, щоб потрапити на першу точку перерви, а потім ви зможете її зняти.

Точка перерви назви подій Чому я вважаю, що це найкращий спосіб отримати всі події, що надсилаються на завантаження сторінки, тому що це також покаже вам усі події, які розсилаються контролерами. Кожен контролер розсилає події до і після зі складеними іменами, що містять FullActionName, RouteName та стандартну післядиспетчеризацію за замовчуванням. Дивіться Framework\App\Actionклас за методом dispatch () .


0

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

/vendor/magento/framework/Event/Manager.php

додайте цей код під назвою події

$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

Ви можете перевірити список в<magentoroot>/var/log/events.log


-1

Ви можете перевірити нижче посилання https://github.com/matinict/Magento-2-Events

я страждаю, що різні люди діляться різними подіями, але жодна точність не втратила часу, нарешті, його лише хитрощі переходять до перевірки постачальника magento 2 тощо / event.xml, сподіваюся, що це може допомогти розробнику magento 2

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.