Есть ли полный список событий в Magento 2? Я ищу что-то вроде шпаргалки Magento Events (1.9)
Есть ли полный список событий в Magento 2? Я ищу что-то вроде шпаргалки Magento Events (1.9)
Ответы:
Я собрал список событий 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, вы заметите, что его совсем нет dispatch
: github.com/magento/magento2/… Я понятия не имею, пока как эти события рассылаются, но было бы здорово включить их в список!
sales_order_save_after
(как один пример) не появляется в списке (и поиске), а также не выглядит как динамическое событие. А потом я подумал, можно ли и как включить такие события, чтобы получить более полный список. И, очевидно, я говорю только о Magento 2 sales_order_save_after
- это событие Magento 2, насколько я могу судить.
Очевидно, что это не очень хорошая практика, но я предоставляю одну ссылку, которая соответствует важным событиям в Magento2
http://cyrillschumacher.com/magento2-list-of-all-dispatched-events/
Конечно, список событий неполон, как если бы вы работали с Magento 1.x, логика отправки событий сохраняется
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());
Диспетчер диспетчеризации
Библиотека / внутренний / 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
Внешний вид визуализации событий внешнего интерфейса
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
Коллекции Моделей
Библиотека / внутренний / 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
Ответы, прежде всего, работают отлично, но иногда вам нужно знать, какие события генерируются при загрузке определенной страницы и в каком порядке.
Так что здесь есть лучший способ (по моему мнению, знать это), использовать xDebug и установить точку останова на строке 56 в классе Magento\Framework\Event\Manager
(она находится в lib
папке, а не в app
папке).
В вашем отладчике просто сказать ему «Оценка и журнал»$eventName
переменную и посмотреть все события будут отображаться в консоли , как при загрузке страницы.
Я также рекомендовал бы отключить опцию «Приостановить», так как может быть выброшено сотни событий, вам может потребоваться оставить ее включенной для достижения первой точки останова, а затем удалить ее.
Почему я считаю, что это лучший способ получить все события, отправляемые при загрузке страницы, потому что это также покажет вам все события, отправленные контроллерами. Каждый контроллер отправляет события до и после с составными именами, содержащими имя FullActionName, RouteName и значение по умолчанию после отправки. Смотрите Framework\App\Action
класс под методом dispatch () .
Его трудно получить событие знать конкретную страницу. Таким образом, вы можете попробовать этот код, чтобы отслеживать вызываемые события и использовать лучший для ваших нужд
/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
Вы можете проверить ссылку ниже событий https://github.com/matinict/Magento-2-Events
Я страдаю от того, что разные люди разделяют разные события, но ни одна точность не потеряла мое время, в конце концов, это просто уловки, обратитесь к вашему провайдеру magento 2 и т.д. / event.xml, надеюсь, это поможет разработчику magento 2