Yii的事件机制 - 简单实例

1.环境搭建

我们在vendor目录创建event测试目录包含cat和mouse的两个类

要想拥有事件机制就要继承yii\base\Component  其中包含事件的触发 绑定 解绑等方法

cat:

namespace vendor\event;
use yii\base\Component;
use yii\base\Event;

//创建一个事件对象 用于传递数据
class MyEvent extends Event
{
    public $message;
    public function data(){
        echo 'abc';
    }
}

//必须继承组件类 - 其中包含事件处理方法
class Cat extends Component
{
    public function shout(Event $event){
        echo 'miao miao miao<br />';

        //当shout方法执行时触发miao事件 并接收一个参数
        $this->trigger('miao',$event);
    }
}
mouse:

namespace vendor\event;

class Mouse
{
    public function run($data){
        //自定义事情
        echo 'I want to run away<br />';
        //处理参数
        echo  $data->message;
        $data->data();
    }
}
控制器中实现

namespace app\controllers;
use yii\web\Controller;
use vendor\event\Cat;
use vendor\event\Mouse;
use vendor\event\MyEvent;

class TestController extends Controller
{
    public function actionTest(){
        //实例化小猫 小鼠
        $cat = new Cat();
        $mourse = new Mouse();

        //实例化事件对象 - 用以传递数据
        $event = new MyEvent();
        $event->message = 'i am data<br />';
        //给小猫的miao事件绑定一个处理方法
        $cat->on('miao', [$mourse, 'run'],$message);//这里可以是匿名函数或$message作为参数3 以事件属性方式调用
        $cat->off('miao', [$mourse, 'run']);//解绑小鼠的run方法

        //小猫触发事件
        $cat->shout($event);

        return $this->renderPartial('test');
    }
}

运行结果

miao miao miao
I want to run away
i am dataabc
----------------------------------------------------------------------------------------------------------------------------------------------------------以上是单个实例的触发绑定

怎样实现类级别的绑定功能呢? 使用\yii\base\Event::on(); 方法。用法如下

\yii\base\Event::on(Cat::className, '事件名', [处理类, 处理动作]);


这样所有Cat的实例都会触发到指定事件,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值