首页 > 编程语言 >ThinkPHP6事件系统使用指南

ThinkPHP6事件系统使用指南

时间:2024-07-15 11:30:53浏览次数:14  
标签:listen admin app testEvent ThinkPHP6 事件 使用指南 event Event

本文由 ChatMoney团队出品
在ThinkPHP 6中,事件系统提供了一种优雅的方式来实现解耦和动态响应。你可以通过注册事件和对应的监听者来处理各种应用逻辑。
事件注册
闭包注册
闭包是最简单的事件监听者,可以直接在注册时定义。

Event::listen("ClosureEvent", function(){var_dump("ClosureEvent1");
});
Event::listen("ClosureEvent", function(){var_dump("ClosureEvent2");
});

静态方法与普通方法注册
默认方法
首先定义一个事件类,并包含默认的处理方法。

// app\admin\event\testEvent.phpclass testEvent{// 默认方法public function handle(){var_dump("handle");
  }
}

然后在index.php中注册事件。
Event::listen("staticTest", "app\\admin\\event\\testEvent");
自定义方法
你也可以为事件类定义多个方法,并在注册时指定。

// app\admin\event\testEvent.php
class testEvent{
    public function commonTest1(){var_dump("commonTest1");
    }
    public function commonTest2(){var_dump("commonTest2");
    }
    public static function staticTest1(){var_dump("staticTest1");
    }
    public static function staticTest2(){var_dump("staticTest2");
    }
}    

在index.php中按需注册这些方法。
E```
vent::listen("staticTest", "app\admin\event\testEvent::staticTest1");
Event::listen("staticTest", "app\admin\event\testEvent::staticTest2");
Event::listen("commonTest", ["app\admin\event\testEvent", "commonTest1"]);
Event::listen("commonTest", ["app\admin\event\testEvent", "commonTest2"]);


批量注册
如果需要注册多个监听者,可以使用批量注册方法。

Event::listenEvents([
"staticTest" => [
"app\admin\event\testEvent::staticTest1",
"app\admin\event\testEvent::staticTest2"],
"commonTest" => [
["app\admin\event\testEvent", "commonTest1"],
["app\admin\event\testEvent", "commonTest2"],
],
]);


事件订阅者
手动订阅
在事件类中定义一个subscribe方法,手动添加监听者。

// app\admin\event\testEvent.phpclass testEvent{
// ... 已有方法 ...
public function subscribe(\think\Event $event){$event->listen("commonDefaultTest", "\app\admin\event\testEvent");
$event->listen("commonTest", ["\app\admin\event\testEvent", "commonTest1"]);$event->listen("commonTest", ["\app\admin\event\testEvent", "commonTest2"]);
$event->listen("staticTest", "\app\admin\event\testEvent::staticTest1");$event->listen("staticTest", "\app\admin\event\testEvent::staticTest2");
}
}


在index.php中订阅事件。
`Event::subscribe(["app\\admin\\event\\testEvent"]);`
智能订阅
事件类的方法名遵循特定格式时,可以自动识别并订阅。

class testEvent{
public function onCommonTest1(){
var_dump("onCommonTest1");
}
public function onCommonTest2(){
var_dump("onCommonTest2");
}
}


触发事件时,方法名需大写。

Event::trigger("CommonTest1");
Event::trigger("CommonTest2");


调用事件
你可以使用trigger方法来调用事件。
Ev```
ent::trigger("commonTest");
event("commonTest");

高级用法
添加到监听者头部
通过设置listen方法的第三个参数为true,可以将监听者添加到监听者列表的头部。
Event::listen("staticTest","app\\admin\\event\\testEvent", true);
触发单个监听者

trigger方法的第三个参数设置为true时,如果有多个监听者,只触发第一个。
Event::trigger("CommonTest1", null, true);

移除事件
可以使用remove方法来移除特定的事件监听者。
Event::remove("staticTest");
别名
可以为事件定义别名,使得事件触发更加灵活。

Event::bind(["commonTest1" => "app\\admin\\event\\testEvent"]);
Event::listen("commonTest1", ["app\\admin\\event\\testEvent", "commonTest1"]);
Event::trigger("commonTest1");
Event::trigger("app\\admin\\event\\testEvent");

检查事件是否存在
hasListener方法可以用来检查某个事件是否有监听者。
Event::hasListener("commonTest1");
关于我们
本文由ChatMoney团队出品,ChatMoney专注于AI应用落地与变现,我们提供全套、持续更新的AI源码系统与可执行的变现方案,致力于帮助更多人利用AI来变现,欢迎进入ChatMoney获取更多AI变现方案!

标签:listen,admin,app,testEvent,ThinkPHP6,事件,使用指南,event,Event
From: https://www.cnblogs.com/chatrun/p/18302808

相关文章

  • ThinkPHP6事件系统使用指南
    本文由ChatMoney团队出品在ThinkPHP6中,事件系统提供了一种优雅的方式来实现解耦和动态响应。你可以通过注册事件和对应的监听者来处理各种应用逻辑。事件注册闭包注册闭包是最简单的事件监听者,可以直接在注册时定义。Event::listen("ClosureEvent",function(){var_dump("C......
  • SOMEIPSRV_SD_MESSAGE_14: 订阅事件组否定确认条目类型
    测试目的:验证SubscribeEventgroupNegativeAcknowledgment条目类型能够正确指示SubscribeEventgroup条目未被接受。描述测试将模拟一个客户端尝试订阅一个不存在的服务ID的事件组,并检查DUT(DeviceUnderTest,被测试设备)是否能够正确地返回一个SubscribeEventgroupNeg......
  • FL Studio 24.1.1.4234官方中文破解安装使用指南
    FLStudio24.1.1.4234破解版是很多音乐人都在用的全功能的音乐工作站,里面拥有非常先进的制作工具,音符编辑器,音效编辑器,便捷的音源输入,让用户可以自由的在这里自由的改编歌曲,打造出你想要的曲风效果,操作方便,推荐给玩音乐的朋友!这是很多音乐人和音乐爱好者喜欢和追棒的虚拟音......
  • 面试题之一文搞定JS的事件循环机制
    面试又被问到了js事件循环机制,这不狠狠总结一波。事件循环机制是一个非常重要的概念,不仅仅是面试,在笔试以及平时开发过程所遇到的一些问题,都可以通过事件循环机制来理解问题的本质再来解决。在面试的时候,面对这样一道常规的面试题,就一定不能仅仅是将事件循环讲清楚就结束了,一定......
  • 【java深入学习第6章】Spring事件监听机制详解
    在Spring框架中,事件监听机制是一个强大且灵活的功能,允许我们在应用程序中发布和监听事件。这种机制可以帮助我们实现松耦合的设计,使得不同模块之间的通信更加灵活和可维护。本文将详细介绍Spring的事件监听机制,并通过代码示例展示如何使用这一功能。1.什么是Spring事件监听机制?......
  • Python学习笔记36:进阶篇(二十五)pygame的使用之事件监听控制切歌和暂停,继续播放
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • Qt-事件过滤器、事件分发器、事件处理器
    前言Qt中事件的处理步骤1.当事件产生之后,Qt应用程序对象通过调用QApplication::notify()函数将事件发送到指定的窗口。2.事件在发送过程中可以通过向对象(窗口、按钮等)安装事件过滤器QObject::eventFilter()来对事件进行过滤。Qt应用程序默认不对任何产生的事件......
  • 拯救中国足球,要不尝试一下DDD事件风暴?
    DDD领域驱动设计批评文集做强化自测题获得“软件方法建模师”称号《软件方法》各章合集张逸老师写了新文章《领域建模的常见问题及解决方案》,我来谈一谈对这篇文章的感想。(1)文章一开始,张逸老师大大地赞扬了事件风暴:图1摘自《领域建模的常见问题及解决方案》张逸老师......
  • 《DNK210使用指南 -CanMV版 V1.0》第十二章 跑马灯实验
    第十二章跑马灯实验1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html5)正点原子......
  • 前端必会原理--事件循环
    事件循环浏览器的进程模型何为进程?程序运行需要有它自己专属的内存空间,可以把这块内存空间简单的理解为进程每个应用至少有一个进程,进程之间相互独立,即使要通信,也需要双方同意。何为线程?有了进程后,就可以运行程序的代码了。运行代码的「人」称之为「线程」。一个进......