是否有全面的观察员事件清单?

时间:2012-11-05 17:38:52

标签: magento

是否有可以收听的所有事件的综合列表?

如果此列表不存在,那么调试获取所有事件的最佳方法是什么?

4 个答案:

答案 0 :(得分:7)

你永远找不到完整的清单。但是如果你去app / Mage.php,你可以在函数“dispatchEvent()”中输入一些调试代码并记录所有事件。

$params = array();
foreach (array_keys($data) as $key) {
    if (is_object($data[$key])) {
        $params[] = $key.' ('.get_class($data[$key]).')';
    } else {
        $params[] = $key.' ('.gettype($data[$key]).')';
    }
}
Mage::log('event_name:'.$name.',event_passed_keys:'.implode('|',$params),null,'events.log',true);

然后使用一些excel魔法,你可以将它们解析为传递给它的所有事件名称和参数的列表。

许多已编译列表的问题甚至如上所示执行grep都是动态创建的许多事件。这可以让你辨别哪些事件没有列出。

确保注释掉调试代码或events.log文件会在很短的时间后变得很大。

答案 1 :(得分:4)

查看一系列事件@

要在开发环境中记录特定网页的所有活动,您可以添加Mage::log($eventName);

在/app/code/core/Mage/Core/Model/App.php

public function dispatchEvent($eventName, $args){
    Mage::log($eventName); 
    ....

grep -r Mage::dispatchEvent /path/to/your/Magento/* > events.txt

了解更多@

答案 2 :(得分:1)

作为练习,我编写了一个Bash脚本来生成粗略的事件列表(它实际上充当grep的包装器,带有几个开关来提供上下文和可用的参数)。

我已经使用这个脚本为版本1.3.3.0到1.8.0.0版本的默认Magento安装生成事件列表,代码可以在GitHub上找到:

https://github.com/Marko-M/magento-events-list/

此处提供了活动清单:

https://github.com/Marko-M/magento-events-list/tree/master/magento-outofthebox

以及我博客上的后续文章:

http://www.techytalk.info/bash-script-to-generate-list-of-events-for-magento-installation/

请注意,由于动态生成了许多事件名称,因此这些列表永远不会完整。

由于您可能在项目上有扩展并且他们调度自己的事件,因此通过grep或使用我的脚本手动生成此列表会更好。

干杯!

答案 3 :(得分:0)

一般意思是为您感兴趣的任何特定事件设置观察者

请参阅https://magento.stackexchange.com/questions/314/how-to-know-the-magento-event-that-we-want-to-hook

在模块Logevent中,config.xml

 

    0.1  

             Maticode_Logevent_Model     

<controller_action_predispatch>
    <observers>
        <Logevent>
            <type>singleton</type>
            <class>Logevent/observer</class>
            <method>controller_action_predispatch</method>
        </Logevent>
    </observers>
</controller_action_predispatch>

和Model / observer.php

    <?php

class Maticode_Logevent_Model_Observer {  public function controller_action_predispatch($ observer){ Mage :: log($ observer-&gt; getEvent() - &gt; getControllerAction() - &gt; getFullActionName(),null,'eventlog.log'); }

}

这样,在

var/log/eventlog.log file  

你可以看到任何测试动作的可能钩子(点击按钮并检查你的日志)