防止Observer方法调用两次

时间:2012-04-05 21:37:39

标签: events magento observers

我正在使用Magento 1.5.1.0和“mPAY24支付网关”扩展。 我有一个Observer类用于事件“sales_order_payment_pay”发送通知 电子邮件发送给物品的制造商。

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

  • 以注册用户身份登录时 - 将按预期方式调用观察者方法
  • 以访客用户身份退房时,“sales_order_payment_pay”事件为 当“支付交易”(万事达卡,VISA)成功时被解雇“和 点击“返回按钮”后第二次返回Magento商店。 因为这种行为会发送两次电子邮件。

有没有办法防止观察者方法被执行两次?

亲切的问候, 贝尔蒂

1 个答案:

答案 0 :(得分:1)

没有。作为客户(与系统)开发人员,您无法确定事件何时触发。

以下是解决此问题的一些常规起点:

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

如果是前者,请按预期发送电子邮件。如果它是后者,只需来自观察者方法的return和/或使用条件跳过电子邮件。

如果这不是你自己的观察者方法,那就是问题(它是核心观察者或观察者是模块的一部分),使用类重写来用你自己的方法替换观察者方法。如果检测到正确的状态,请调用return parent::observerMethodName,如果是“单击返回按钮”状态,则返回null并跳过调用父项。

如果观察者设置了硬编码的类名(不是类别名),那么您将需要使用代码池覆盖来更改方法的行为。