yii2.0 事件怎么使用

lys2018年01月22日 0条评论

yii2.0 事件怎么使用

1.首先要创建一个Person类

<?php

namespace frontend\entity;
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/1/22
 * Time: 9:17
 */
class Person extends \yii\base\Component
{
    const EVENT_GREET = 'helloWorld';  //事件名
}

2.接着创建一个事件类

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/1/22
 * Time: 9:26
 */

namespace frontend\event;


class SayEvent extends \yii\base\Event
{
    public static $msg = 'say hello';
    const HAHA = '3123';
}

3.接着控制器里面配置

/**
 * 实例事件
 */
public function actionEntityTest(){
     $person = new Person();
     $person->on(Person::EVENT_GREET, [$this,'person_say_hello']);  //实例事件绑定
     $person->on(Person::EVENT_GREET, function ($event){  //这边再次绑定一个事件
         var_dump($event::$msg);
         var_dump($event::HAHA);
     });
   //  $person->off(Person::EVENT_GREET); //删除绑定事件
     $person->trigger(Person::EVENT_GREET,new SayEvent()); //执行时事件按照绑定先后顺序执行,而不是覆盖
}

/**
 * 类级别事件,这个和上面的实例事件绑定的区别就是绑定的是类名,而不是实例
 */
public function actionClassTest(){
    Event::on(Person::className(),Person::EVENT_GREET,function ($event){
        var_dump($event::$msg);
    });
    Event::trigger(Person::className(),Person::EVENT_GREET,new SayEvent());
}

/**
 *事件绑定方法,每个事件绑定方法必须带上一个$event,这个$event 就是new SayEvent()实例
 */
public function person_say_hello($event){
    var_dump('hello world');
    var_dump($event::$msg);
    var_dump($event::HAHA);
}

最后直接浏览器查看效果

如果还需要深入了解,可以参考 http://www.digpage.com/event.html