Чи є повний перелік подій у 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 repo ви помітите, що для неї взагалі немає 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());
Відправлення контролера
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
Макет Frontend відображає події
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
Колекції моделей
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
Відповіді, перш за все, чудово працюють, але іноді потрібно знати, які події викидаються на певне завантаження сторінки та порядок, у який вони кидаються.
Тож ось найкращий спосіб (на мою думку, щоб це знати), використовувати 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