未发射/或观察者未在magento中工作的事件

时间:2010-10-13 14:27:24

标签: debugging events magento observer-pattern

我有一个模块可以监听一些事件。 它在我测试过的至少十几个安装中都能正常工作。

在特定安装上,我在Magento版本1.4.1.1上安装了它的客户端,它不起作用。 当我测试他的系统时,我手动触发事件,例如Mage :: dispatchEvent('..'),观察者会听到它们。

我应该研究什么?我不知道这可能是什么原因。

2 个答案:

答案 0 :(得分:19)

这可能发生的原因有几个

  1. 您尝试收听的事件在您的Magento版本中不存在

  2. 有人攻击核心档案并意外删除了您正在侦听的事件

  3. 有人重写了方法

  4. 你的观察者设置不正确,Magento没有“看到”它。

  5. 您的观察者设置正确,但旧配置已缓存

  6. 我要调试的步骤是

    1. 确保merged global config包含您的事件配置。如果它没有清除你的缓存,直到它出现

    2. 下载新版本的源代码,并将app/code/core/lib/与原始版本区分开来。从unix提示符中键入man diff如果您还不熟悉它,请了解diff工具。

    3. Grep(或ack)您正在尝试收听的活动的核心代码库。

    4. 暂时将日志记录代码添加到Mage::dispatchEvent中的app/Mage.php,以确保您正在寻找的事件真正解雇。

    5. Mage::dispatchEvent开始,按照执行路径指向调用侦听器的位置,看看为什么Magento中的代码没有调用您的方法

    6. 第一次执行此操作将是一个时间接收器,因此请在核心Magento系统代码中记录发生的位置。这样,下次你调试类似的问题时,它会更快(如果你真的想要很好,你可以分享你在这里,你的博客或Magento维基上找到的东西)

答案 1 :(得分:0)

在我recently discovered时,模块可以在Magento中显示为已启用,但如果模块的文件夹名称以小写字母开头,则实际上不起作用。也许这将允许其他人在将来保留他们的头发。