magento事件(event)的dispatchEvent(分发)和catchEvent(获取)

本文介绍了在Magento中如何通过分发和捕捉事件来扩展其核心功能。分发事件只需调用Mage::dispatchEvent方法,而捕捉事件则需要在模块的配置文件中定义观察者。文章还解释了观察者的初始化方式,并提供了配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当你需要扩展Magento的核心的功能时有两个选择:

(1)重写(override)Magentocore classes

(2)使用Magentoevent-driven 机制

由于你只能重写一次Magentocore classes(如果你需要在多个module中重写相同core class就会出现错误),所以使用MagentoEvent就大显神威了,它使得你的工作简易方便。

Magentoevent-driven机制中有两个非常重要的概念:

(1)分发(dispatch)一个事件(event)

(2)捕捉(catch)一个事件(event)

 

Dispatching events

 

Magento中你需要调用 Mage::dispatchEvent(...) 就可以Dispatch一个Event,

 

Mage::dispatchEvent('custom_event', array('object'=>$this));  

 

该方法有两个参数,一个是事件的标识符(在所有事件中唯一)和一个关联数组。该数组的键值是一个dataVarien_Event_Observer 的一个实例),这个data将被执行事件的函数(observer)进行处理并返回结果。

 

Catching events

 

捕捉事件比分发复杂一些,你必须使用一个已有的module或者新建一个module.这里新建一个,目录结构如下:  

 

在该目录的config.xml文件中,我们新定义一个event observer,下面是参考示例(当然你可以定义不同scopeevent observer):

上面的xml的配置有一个要注意的地方,就是<type />标签里的值可以是model,object,singleton,其中modelobject是等效的且它们都将使用Mage::getModel(....)方法来进行初始化;而singleton将使用Mage::getSingleton(....)来初始化。此外,在Observer.php中就是相关的observer类的定义,该类既不需要继承其他类也不需要继承其他接口。这需要在customObserverAction方法的参数中传入Varien_Event_Observer类的一个实例,正是这个实例对象把dispatcherevent handler联系到一起。同时该实例对象也是继承于Varient_Object,所以拥有getter魔术方法,例:

 

转载于:https://www.cnblogs.com/jeremyke/p/6145059.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值