码迷,mamicode.com
首页 > 其他好文 > 详细

YII框架的事件机制

时间:2015-10-06 18:14:32      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:

一、什么是事件机制

解释:发生了一件事情,然后某些东西对这件事作出反应。

例子:假设发生了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通过这种事件机制,实现了在整个请求处理过程中,不改动原有逻辑的情况下,十分方便的添加其它处逻辑。

 

YII框架的事件机制

标签:

原文地址:http://www.cnblogs.com/buexplain/p/4857453.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!