是否有可以收听的所有事件的综合列表?
如果此列表不存在,那么调试获取所有事件的最佳方法是什么?
答案 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
你可以看到任何测试动作的可能钩子(点击按钮并检查你的日志)