Php Yii:多活动最佳实践

Php Yii:多活动最佳实践,php,events,yii,exception-handling,error-handling,Php,Events,Yii,Exception Handling,Error Handling,Yii中的事件看起来很棒,但有几个问题仍然让我在晚上醒来: 若我引发一个事件并在链中创建几个PHP事件处理程序类,我可以在它们之间传递不同的数据(比如返回值)吗? 这项活动是为实现这一目标而设计的吗?据我所知,事件似乎是一种单向的通知方式,将数据传回不是一种常见的做法,对吗 让我们说: 我有3个处理程序:Handler1,Handler2,Handler3按此顺序执行。每个处理程序连接一些字符串数据。 我可以在处理程序之间传递连接的sting吗?是否假定处理程序会这样做 在事件链中,在事件处理

Yii中的事件看起来很棒,但有几个问题仍然让我在晚上醒来:

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

    让我们说:

    我有3个处理程序:Handler1Handler2Handler3按此顺序执行。每个处理程序连接一些字符串数据。 我可以在处理程序之间传递连接的sting吗?是否假定处理程序会这样做

  • 在事件链中,在事件处理程序中引发异常是否是一种好的做法


事件系统主要设计(或至少:记录)为只读通知系统,这一点是正确的。但是,可以通过创建自己的子类事件来实现您想要的功能,该子类事件定义了要传递的数据的公共属性

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

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';
}
如果一切顺利的话,这应该是回音
helloworld,再见world