从事件观察员Magento的数据返回给调度员(Return data back to dispatc

2019-07-03 15:55发布

我对那个分派登记保存后的事件产品注册的扩展。 另一个扩展使用该事件如果相关注册产品产生的优惠券的虚拟产品。

我需要找回上产生的优惠券数据发送给用户的电子邮件与他们的产品注册的详细信息。

有没有办法从观测数据返回到分派事件?

Answer 1:

有你的目的在Magento提供了一招。 既然你可以传递事件数据的观察员,同类产品或类别的模型,它也可以创建一个容器,从中可以得到这个数据。

例如这样的动作可以在调度员进行:

$couponContainer = new Varien_Object();
Mage::dispatchEvent('event_name', array('coupon_container' => $couponContainer));
if ($couponContainer->getCode()) { 
    // If some data was set by observer...
}

和观察者方法如下所示:

public function observerName(Varien_Event_Observer $observer) 
{
    $couponContainer = $observer->getEvent()->getCouponContainer();
    $couponContainer->setCode('some_coupon_code');
}

享受和乐趣!



Answer 2:

没有,没有什么内置在系统中执行此操作。 Magento的惯例是创建一个stdClassVarien_Object传输对象。

看看块事件代码

#File: app/code/core/Mage/Core/Block/Abstract.php

...
if (self::$_transportObject === null) 
{
    self::$_transportObject = new Varien_Object;
}

self::$_transportObject->setHtml($html);
Mage::dispatchEvent('core_block_abstract_to_html_after',
    array('block' => $this, 'transport' => self::$_transportObject));
$html = self::$_transportObject->getHtml();
...

由于self::$_transportObject是一个对象,而PHP对象的行为像方式执行基准,以观察员的传输对象所做的任何更改将保持不变。 所以,在上面的例子中,如果观察员开发商表示

$html = $observer->getTransport()-setHtml('<p>New Block HTML');

早在系统块码了self::$_transportObject将包含新的HTML。 请记住, 多个观察员将有机会改变这个值,为了观测火在Magento将为每个配置的系统不同。

你可以采取第二种方法是使用Magento的注册模式。 在之前注册的变量dispatchEvent



文章来源: Return data back to dispatcher from event observer in Magento
标签: php magento