Magento 2中是否有完整的事件列表?我正在寻找Magento活动备忘单(1.9)
Magento 2中是否有完整的事件列表?我正在寻找Magento活动备忘单(1.9)
Answers:
我使用了Magento 2事件列表
find . -type f -exec grep -n -H -A 2 -T "eventManager->dispatch(" {} \;
该列表分为两部分,一部分用于静态事件,另一部分用于动态事件。
从这里开始,静态事件就是所有使用完整事件名称定义的事件,例如:
$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
(仅作为一个示例)没有出现在列表(和搜索)中,而且看起来也不像动态事件。然后,我在考虑是否以及如何将此类事件包括在内,以获得更完整的列表。sales_order_save_after
就我所知,很明显我只是在谈论Magento 2 是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
前端布局渲染事件
$this->_eventManager->dispatch(
'controller_action_layout_render_before_' . $this->_request->getFullActionName()
);
模型集合
lib /内部/ Magento /框架/模型/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和默认后调度一个的组合名称在事件之前和之后调度事件。请参见dispatch()方法Framework\App\Action
下的类。
它很难得到该事件在特定的页面知道。因此,您可以尝试使用此代码来跟踪调用的事件,并根据需要使用最佳事件
/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供应商检查etc / event.xml,希望对magento 2开发人员有所帮助