ThinkPHP8事件两种使用方式

时间:2025-04-11 07:31:28
  • 生成事件类
    1. //定义一个自定义Event类,其实不一定是事件类,普通类也行,但是用事件类架构更加清晰
    2. //以下会在目录app\event下生成一个UserLogin事件类
    3. php think make:event UserLogin

    编写代码如下:

    1. namespace app\event;
    2. class UserLogin
    3. {
    4. //hand方法名和参数是自定义的
    5. public function sendMessage($param)
    6. {
    7. //处理代码
    8. echo('sendmessage');
    9. }
    10. }
  • 生成订阅类,在subscribe函数里手动注册事件监听
    1. class UserLoginSubscribe
    2. {
    3. //手工事件订阅,方法名必须为subscribe,并在函数里添加事件到事件订阅者
    4. public function subscribe(Event $event)
    5. {
    6. //添加事件到订阅者 第一个参数为事件标识,随便写,第二个参数事件类和执行的函数
    7. $event->listen('UserLogin',[app('app\event\UserLogin'),'sendMessage']);
    8. //也可以为自动标识函数onLogout动态修改事件标识,原来标识为Logout,现改成Out
    9. //$event->listen('Out', [$this,'onUserLogout']);
    10. }
    11. }
  • 注册订阅
    1. return [
    2. 'subscribe' => [
    3. 'app\subscribe\UserLoginSubscribe',
    4. // 更多事件订阅
    5. ],
    6. ];
  • 调用
    1. //调用,事件标识是$event->listen('UserLogin',[app('app\event\UserLogin'),'sendMessage'])第一个参数
    2. event('UserLogin');