Events 防止观察者方法调用两次

Events 防止观察者方法调用两次,events,magento,observers,Events,Magento,Observers,我正在使用Magento 1.5.1.0和“mPAY24支付网关”扩展。 我有一个观察者类用于发送通知的“销售\订单\付款\付款”事件 向物品制造商发送电子邮件 此解决方案有一些奇怪的行为: 当以注册用户身份登录时,将按预期调用observer方法 当以来宾用户身份签出时,“销售\订单\付款\付款”事件是 “支付交易”(万事达卡、VISA卡)成功时触发”和 第二次点击“返回按钮”返回Magento商店。 由于这种行为,电子邮件会发送两次 有没有办法防止观察者方法执行两次 亲切问候,, Ber

我正在使用Magento 1.5.1.0和“mPAY24支付网关”扩展。 我有一个观察者类用于发送通知的“销售\订单\付款\付款”事件 向物品制造商发送电子邮件

此解决方案有一些奇怪的行为:

  • 当以注册用户身份登录时,将按预期调用observer方法
  • 当以来宾用户身份签出时,“销售\订单\付款\付款”事件是 “支付交易”(万事达卡、VISA卡)成功时触发”和 第二次点击“返回按钮”返回Magento商店。 由于这种行为,电子邮件会发送两次
有没有办法防止观察者方法执行两次

亲切问候,, Bertie

不。作为一名客户机(vs.系统)开发人员,您无法决定何时触发事件

以下是解决此问题的一些一般出发点:

相反,您需要更改observer方法的行为。您需要检查
$observer->getData()中系统和/或对象的状态,而不是盲目地在observer方法中发送电子邮件
array,并确定事件是在支付交易后触发的,还是在单击“单击返回按钮”后触发的

如果是前者,请按预期发送电子邮件。如果是后者,只需从observer方法返回
和/或使用条件跳过电子邮件即可

如果这不是您自己的观察器方法(它是核心观察器或属于模块的观察器),请使用类重写将观察器方法替换为您自己的方法。如果检测到正确的状态,请调用
return parent::observer methodname
,如果是“单击返回按钮”状态,只需返回null并跳过调用父级


如果使用硬编码类名(而不是类别名)设置了observer,则需要使用代码池覆盖来更改方法的行为。

我的问题不是特定于“mPAY24支付网关”。请报告您的想法/提示,如何防止观察员方法执行两次。请看这里:谢谢你的评论,这些信息对我帮助很大。Observer是自定义扩展的一部分,它使bei成为了另一个目前不可用的开发人员。Observer方法没有将Varien_Event_Observer对象$Observer作为参数传递。类FOO_Bar_Observer{public function sendmail($parameters){//发送电子邮件}