Yii:多事件最佳实践

时间:2014-11-04 20:33:48

标签: php events yii exception-handling error-handling

Yii的活动看起来很棒,但有几个问题在晚上仍然让我觉醒:

  • 如果我引发一个事件并在链中创建几个PHP事件处理程序类,我可以在它们之间传递不同的数据(如返回值)吗? 该活动是为此目标而设计的吗?据我所知,事件似乎是单向通知的方式,并且传回数据不是常见的做法,这是正确的吗?

    让我们说:

    我有3个处理程序:处理程序1 处理程序2 处理程序3 按此顺序执行。每个Handler连接一些字符串数据。 我可以在处理程序之间传递连接的sting并且假设这样做的处理程序吗?

  • 在事件链中,在事件处理程序中抛出异常是一种好习惯吗?

1 个答案:

答案 0 :(得分:2)

您是正确的,事件系统主要是设计(或至少:记录)为只读通知系统。但是,可以通过创建自己的子类Event来执行您想要传递的数据的公共属性。

例如,从自定义事件类开始:

class MyEvent extends \yii\base\Event
{
    public $data;
}

触发此事件:

$event = new MyEvent([
    'data' => 'hello world'
]);

$this->trigger('myEvent', $event);

echo "After passing through the entire event chain, data is now: " . $event->data;

添加听取它的行为(或处理程序):

public function onMyEvent($event)
{
    $event->data .= ', goodbye world';
}

如果一切顺利,最终应该回复hello world, goodbye world