thinkphp6 事件 event 流程与例子

thinkphp6 事件 event 流程与例子

注意:php

事件返回值,都是Array类型。thinkphp

执行流程

sequenceDiagram
    participant a as 控制器
    participant b as 事件(定义方法)
    participant c as 监听(执行事件方法)
    b-->>a:注册/动态绑定
    c-->>a:设置事件的监听
    a->>b:触发事件
    a-->>c:传入参数
    c-->>b:执行事件方法
    b->>a:返回值

event 事件类说明

定义须要触发的代码与方法。app

listener 监听事件

  1. 触发事件时,执行事件类内的方法与代码。
  2. 触发事件,传入的对象,由监听类接受。
  3. 触发事件,返回值,也由监听类返回。

两种例子

  1. 设置监听类code

    // 动态绑定事件
    Event::bind(['UserRegisterEventName' => 'app\event\UserRegister']);
    // 设置监听类
    Event::listen('UserRegisterEventName', 'app\listener\UserRegister');
    // 触发事件
    $r = Event::trigger('UserRegister',$phone);
    return $r;
  2. 直接调用方法对象

    // 申明事件
    use app\event\Sms;
    
    // 事件注册
    Event::bind(['sms' => 'app\event\Sms']);
    // 直接设置监听
    Event::listen('sms', function (Sms $Sms,$opt){
      $rs = $Sms->send($opt['phone'],$opt['code']);
      if ($rs != 'OK'){
        return false;
      }else{
        return true;
      }
    });
    // 触发事件
    $r = Event::trigger('sms',array('phone'=>$phone,'code'=>$code));
    return $r;

返回值,都是Array类型事件

相关文章
相关标签/搜索