一、什么是事件机制
解释:发生了一件事情,然后某些东西对这件事作出反应。
例子:假设发生了A同学结婚事件,然后B同学给份子钱反应,那么,B是怎么知道(监听)A事件的发生了呢,有两种办法。
扫描式:B不断的询问A是否要结婚。
绑定式:A要结婚的时候会及时通知B。
二、Yii框架的事件实现方式
Yii采用的是观察者模式来实现事件机制。
事件的监听方式,采用的是,绑定式。
绑定级别有,对象级别绑定,类级别绑定。
下面是代码实例。
1、在 vendor 目录下 新建 classmate 并制作 A同学,B同学类,C同学类。
A同学类。
<?php namespace vendor\classmate; use \yii\base\Component; use \yii\base\Event; class MyEvent extends Event{ //继承事件类 public $message; } class A_classmate extends Component //继承组件类 { /** * A 同学结婚 */ function marry() { echo ‘A:我要结婚了!<br/>‘; $msg = new MyEvent; $msg->message = ‘多少随意<br/>‘; // 事件结束的时候通知绑定在这个事件上的方法。 $this->trigger(‘marry‘,$msg); //第一个参数是事件名称,第二个参数是需要传递给监听方法的参数 它是一个对象 } }
B同学类。
<?php namespace vendor\classmate; class B_classmate { /** * B 同学给份子钱 */ function member_money($e) { echo $e->message; //接受到事件结束时候传递的参数 echo ‘B:份子钱已备好,拿去不谢!<br/>‘; } }
C同学类。
<?php namespace vendor\classmate; class C_classmate { /** * C 同学给份子钱 */ function member_money($e) { echo $e->message; //接受到事件结束时候传递的参数 echo ‘C:份子钱已备好,拿去不谢!<br/>‘; } }
2、在控制器中调用上面的三个类。
<?php namespace app\controllers; use yii\web\Controller; use \YII; use vendor\classmate\A_classmate; use vendor\classmate\B_classmate; use vendor\classmate\C_classmate; use \yii\base\Event; class TestController extends Controller { public function actionIndex() { $A_classmate = new A_classmate(); $B_classmate = new B_classmate(); $C_classmate = new C_classmate(); //将事件与对象方法进行绑定 解绑方法是 off $A_classmate->on(‘marry‘,[$B_classmate,‘member_money‘]); //对象级别的事件绑定 Event::on(A_classmate::className(),‘marry‘,[$C_classmate,‘member_money‘]); //类级别的对象绑定 Event::on(A_classmate::className(),‘marry‘,function(){ //类级别绑定匿名函数 注意对象级别也可以绑定匿名函数 echo ‘D:呵呵,没空!<br/>‘; }); //发生事件 $A_classmate->marry(); } }
3、表现在浏览器上的效果是。
三、总结
yii通过这种事件机制,实现了在整个请求处理过程中,不改动原有逻辑的情况下,十分方便的添加其它处逻辑。
时间: 2024-10-12 09:08:35