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

mbalparda
источник
Список очень полезен, но кажется неполным. sales_order_save_afterНапример, событие, которое очень важно для моей текущей задачи, отсутствует, и когда вы будете искать в репозитории Magento 2, вы заметите, что его совсем нет dispatch: github.com/magento/magento2/… Я понятия не имею, пока как эти события рассылаются, но было бы здорово включить их в список!
Джи DWork
Откуда вы знаете, что название события не существует? Может быть, вы ищете эквивалент в Magento 2 с другим именем?
mbalparda
Не уверен, если мы говорим об одном и том же. Мне просто интересно, почему событие sales_order_save_after(как один пример) не появляется в списке (и поиске), а также не выглядит как динамическое событие. А потом я подумал, можно ли и как включить такие события, чтобы получить более полный список. И, очевидно, я говорю только о Magento 2 sales_order_save_after- это событие Magento 2, насколько я могу судить.
Джи 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. Диспетчер диспетчеризации

    Библиотека / внутренний / Magento / Framework / App / Действие / 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. Внешний вид визуализации событий внешнего интерфейса

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

    Библиотека / внутренний / Magento / Framework / Модель / ResourceModel / Db / Коллекция / AbstractCollection.php

    $this->_eventManager->dispatch($this->_eventPrefix . '_load_before', [$this->_eventObject => $this]);
    
    $this->_eventManager->dispatch($this->_eventPrefix . '_load_after', [$this->_eventObject => $this]);

Есть много таких событий, и это комбинация явных и неявно сгенерированных событий в Magento2

huzefam
источник
Хорошая вещь! Мы должны объединить наши ответы, чтобы все было в одном месте. Как вы думаете?
mbalparda
хорошо, ваш ответ тоже самодостаточен
huzefam
1

Ответы, прежде всего, работают отлично, но иногда вам нужно знать, какие события генерируются при загрузке определенной страницы и в каком порядке.

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

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

Я также рекомендовал бы отключить опцию «Приостановить», так как может быть выброшено сотни событий, вам может потребоваться оставить ее включенной для достижения первой точки останова, а затем удалить ее.

Имена событий точки останова Почему я считаю, что это лучший способ получить все события, отправляемые при загрузке страницы, потому что это также покажет вам все события, отправленные контроллерами. Каждый контроллер отправляет события до и после с составными именами, содержащими имя FullActionName, RouteName и значение по умолчанию после отправки. Смотрите Framework\App\Actionкласс под методом dispatch () .

drew7721
источник
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

Priyank
источник
-1

Вы можете проверить ссылку ниже событий https://github.com/matinict/Magento-2-Events

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

matinict
источник