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類型事件

相關文章
相關標籤/搜索