首页 > 其他分享 >yii2事件

yii2事件

时间:2024-03-30 14:45:47浏览次数:22  
标签:... name public handler 事件 yii2 EVENT MyEvent

yii2事件

事件可以将自定义代码“注入”到现有代码中的特定执行点。

1 yii\base\Event 封装了与时间相关的有关数据并提供了一些功能函数作为辅助

class Event extends Object
{
    public $name;               // 事件名
    public $sender;             // 事件发布者,通常是调用了 trigger() 的对象或类。
    public $handled = false;    // 是否终止事件的后续处理
    public $data;               // 事件相关数据

    private static $_events = [];

    public static function on($class, $name, $handler, $data = null, $append = true)
    {
        // ... ...
        // 用于绑定事件handler
    }

    public static function off($class, $name, $handler = null)
    {
        // ... ...
        // 用于取消事件handler绑定
    }

    public static function hasHandlers($class, $name)
    {
        // ... ...
        // 用于判断是否有相应的handler与事件对应
    }

    public static function trigger($class, $name, $event = null)
    {
        // ... ...
        // 用于触发事件
    }
}

2、时间handler

所谓时间handler就是时间处理程序,负责时间触发后怎么办的问题,从本质上来说,一个事件handler就是一段PHP代码,即一个PHP函数。

3、事件的绑定和解除

a、yii\base\Component:: on() 就是用来绑定的 b、yii\base\Component:: off() 就是用来解除的

$person = new Person;

// 使用PHP全局函数作为handler来进行绑定
$person->on(Person::EVENT_GREET, 'person_say_hello');

// 使用对象$obj的成员函数say_hello来进行绑定
$person->on(Person::EVENT_GREET, [$obj, 'say_hello']);

// 使用类Greet的静态成员函数say_hello进行绑定
$person->on(Person::EVENT_GREET, ['app\helper\Greet', 'say_hello']);

// 使用匿名函数
$person->on(Person::EVENT_GREET, function ($event) {
    echo 'Hello';
});

4 示例

事件类\common\events\MyEvent

<?php
namespace app\common\events;
use yii\base\Event;

class MyEvent extends Event{
    const EVENT_SENT_MAIL = 'sent-mail';

    const EVENT_CALL_ADMIN = 'call-admin';

    const EVENT_TEST = 'test';

    public function callAdmin(){
        echo 'admin is answer';
    }

    public static function sentMail($event){
        echo 'sent mail';
        var_dump($event->data['name']);
        var_dump($event->data['email']);
    }
}

调用

<?php
namespace app\controllers;
use app\common\events\MyEvent;
use app\models\Admin;

class TestController extends \yii\base\Controller
{
    public function actionIndex()
    {
        //静态方法事件
        $model = new Admin();
        $model->on(MyEvent::EVENT_SENT_MAIL,['app\common\events\MyEvent','sentMail'],['name'=>'huyongjian','email'=>'[email protected]']);
        $model->trigger(MyEvent::EVENT_SENT_MAIL);

        echo '<br>';
        //对象方法事件
        $event = new MyEvent();
        $model->on(MyEvent::EVENT_CALL_ADMIN,[$event,'callAdmin'],['name'=>'huyongjian','email'=>'[email protected]']);
        $model->trigger(MyEvent::EVENT_CALL_ADMIN);

        //匿名函数
        $model->on(MyEvent::EVENT_TEST,function ($event){
            echo 'test';
        });
        $model->trigger(MyEvent::EVENT_TEST);
    }
}
 

标签:...,name,public,handler,事件,yii2,EVENT,MyEvent
From: https://www.cnblogs.com/hu308830232/p/18105462

相关文章

  • Yii2验证器Validator
    Yii2验证器Validator控制器publicfunctionactionIndex(){$data=['LoginForm'=>['username'=>'huyongjian','password'=>'1234']];$model=newLoginForm();$model->load($......
  • yii2-队列使用
    yii2-队列使用安装yii2-queuecomposerrequireyiisoft/yii2-queue安装yii2-rediscomposerrequireyiisoft/yii2-redis控制台配置文件console.php和web.php'redis'=>['class'=>'yii\redis\Connection',&......
  • Yii2 过滤器
    Yii2过滤器过滤器AccessControllerAccessControl基于一组规则提供简单的访问控制/***{@inheritdoc}*/publicfunctionbehaviors(){return['access'=>['class'=>AccessControl::class,......
  • yii2数据库访问对象
    yii2数据库访问对象配置数据库链接$db=newyii\db\Connection(['dsn'=>'mysql:host=localhost;dbname=xhj','username'=>'root','password'=>'123456',......
  • yii2 扩展
    yii2扩展示例安装扩展composerrequire--prefer-distyiisoft/yii2-imagine使用扩展useyii\imagine\Image;publicfunctionactionIndex(){Image::thumbnail('@webroot/img/test.jpg',120,120)->save(Yii::getAlias('@runt......
  • yii2表单使用
    yii2表单使用模型models/form/EntryForm.php<?phpnamespaceapp\models\form;useyii\base\Model;classEntryFormextendsModel{public$name;public$email;publicfunctionrules(){return[[['name',&......
  • yii2 rules验证规则大全
    yii2rules验证规则大全required : 必须值验证属性[['name','email'],'required'][['name'],'required','message'=>'提示信息']email : 邮箱验证[['email'],'email','message'=......
  • Yii2行为用法
    Yii2行为用法使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充行为类(app\common\behaviors\MyBehavior)<?phpnamespaceapp\common\behaviors;useyii\base\Behavior;classMyBehaviorextendsBehavior{public$name;public$age;......
  • yii2模块
    yii2模块模块是独立的软件单元,由模型, 视图, 控制器和其他支持组件组成, 终端用户可以访问在应用主体中已安装的模块的控制器, 模块被当成小应用主体来看待,和应用主体不同的是, 模块不能单独部署,必须属于某个应用主体。模块文件结构modulesadmincontrollers......
  • yii2服务定位器
    yii2服务定位器服务定位器是注册和访问组件的对象注册组件useyii\di\ServiceLocator;useyii\caching\FileCache;$locator=newServiceLocator;//通过一个可用于创建该组件的类名,注册"cache"(缓存)组件。$locator->set('cache','yii\caching\ApcCache');//通过......