Magento 2活动列表


Answers:


18

我使用了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/…我还不知道如何调度这些事件,但是将它们包括在列表中将是很棒的!
Jey DWork '16

您怎么知道它的事件名称不存在?也许您正在寻找Magento 2中的另一个名字的对等物?
mbalparda'7

不知道我们是否在谈论同一件事。我只是想知道为什么事件sales_order_save_after(仅作为一个示例)没有出现在列表(和搜索)中,而且看起来也不像动态事件。然后,我在考虑是否以及如何将此类事件包括在内,以获得更完整的列表。sales_order_save_after就我所知,很明显我只是在谈论Magento 2 是Magento 2事件。
Jey DWork '16

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. 前端布局渲染事件

    $this->_eventManager->dispatch(
        'controller_action_layout_render_before_' . $this->_request->getFullActionName()
    );
  4. 模型集合

    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中显式和隐式生成的事件的组合


好东西!我们应该合并我们的答案以将所有内容都放在一个地方。你怎么看?
mbalparda

好吧,你的答案也是自给自足的
huzefam 2015年

1

最重要的答案是行之有效的,但是有时您需要知道特定页面加载时会抛出哪些事件以及它们的抛出顺序。

因此,这里是最好的方法(我认为是这样),请使用xDebug并在类的第56行上设置一个断点Magento\Framework\Event\Manager(它位于lib文件夹而不是app文件夹中)。

在调试器只是告诉它“评估和记录”$eventName变量,并观察加载页面的所有事件显示在控制台。

我还建议您禁用“挂起”选项,因为可能会引发数百个事件,您可能需要将其保持打开状态才能命中第一个断点,然后才能将其删除。

事件名称断点 为什么我认为这是获取在页面加载上调度的所有事件的最佳方法,是因为这还将向您显示由控制器调度的所有事件。每个控制器使用包含FullActionName,RouteName和默认后调度一个的组合名称在事件之前和之后调度事件。请参见dispatch()方法Framework\App\Action下的类。


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供应商检查etc / event.xml,希望对magento 2开发人员有所帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.