Yii的活动看起来很棒,但有几个问题在晚上仍然让我觉醒:
如果我引发一个事件并在链中创建几个PHP事件处理程序类,我可以在它们之间传递不同的数据(如返回值)吗? 该活动是为此目标而设计的吗?据我所知,事件似乎是单向通知的方式,并且传回数据不是常见的做法,这是正确的吗?
让我们说:
我有3个处理程序:处理程序1 ,处理程序2 ,处理程序3 按此顺序执行。每个Handler连接一些字符串数据。 我可以在处理程序之间传递连接的sting并且假设这样做的处理程序吗?
在事件链中,在事件处理程序中抛出异常是一种好习惯吗?
答案 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