thinkphp8中事件的使用
thinkphp8中事件的使用**事件使用主要有事件监听、事件订阅、事件绑定三种方式**生成相关类的命令行什么是自动注册什么是手动注册事件监听监听类listener目录下的文件手动注册自动注册事件订阅订阅类subscribe目录下手动注册自动注册事件绑定事件类event目录下手动注册自动注册【重要】其他事件使用主要有事件监听、事件订阅、事件绑定三种方式生成相关类的命令行php think make:event 事件类名 php think make:listener 监听类名 php think make:subscribe 订单类名什么是自动注册event.php在框架加载的时候会自动载入在event.php文件中事先做一些处理定义listen数组中的事件名和对应的事件处理类定义subscribe数组中的订阅类定义bind数组的事件名和对应类什么是手动注册就是在控制器业务代码内写事件的监听和触发的代码可以不用管event.php文件。事件订阅 Event::subscribe(…)事件监听 Event::listen(…)触发事件 Event::trigger(…)事件监听就像html文档中dom.addEventlistener(“click”, 事件处理函数)。然后当你点击dom的时候就会执行事件处理函数监听类listener目录下的文件class EventName{ public function handle($event){ //这时候的$event应该是传过来的参数 } }手动注册在Controller内的业务代码写 事件监听和事件触发。// 相当于是dom.addEventlistener(click, 事件处理函数)。只是监听你不点击我也不执行。 Event::listen(EventName, \app\listener\监听类::class); // 相当于你点击dom会自动运行监听类里handle函数。 // 一般发问下 监听类 和 事件名 是一样的但是含义不同也可以不同名。例如 Event::lister(UserLogin,\app\listener\UserLogin::class) Event::trigger(UserLogin, [$params])自动注册在event.php文件定义listen数组中的事件名和对应的事件处理类// 相当于是dom.addEventlistener(click, 事件处理函数)。只是监听你不点击我也不执行。 listen [ EventName [\app\subscribe\监听类::class] //一定是数组一个事件可以绑定多个监听处理类 ]Controller内的业务代码只用触发事件就可以了。Event::trigger(EventName, [$params])事件订阅就你一个事件监听中心一样。只要subscribe了一个订阅类然后就可以触发其中事件处理函数。订阅类subscribe目录下use think\Event; class subName{ public function onEventName1($params){} public function onEventName2($params){} public function subscribe(Event $event) { $event-listen(EventName1, [$this,onEventName1]); $event-listen(EventName2, [$this,onEventName1]); } }手动注册Controller内的业务代码// 订阅并触发其中的事件函数。 Event::subscribe(\app\subscribe\订阅类::class); Event::trigger(EventName, [$params])自动注册在event.php文件定义subscribe数组中的订阅类subscribe [ \app\subscribe\订阅类::class ]Controller内的业务代码Event::trigger(EventName, [$params])注意如果订单类里同时有on[EventName1]和subscribe函数那么事件触发只会调用subscribe函数。代码结构执行效果事件绑定事件类event目录下一个普通类的实现代码手动注册Controller内的业务代码Event::bind([UserLogin app\event\事件类]); // 这里要用 字符串 来写事件类 Event::listen(UserLogin, \app\listener\监听类::class); //这里要用 监听类::class 来写监听类 Event::trigger(new 事件类()); //事件类传不传参看事件类的构造函数自动注册在event.php文件定义bind数组中的事件名和事件类绑定关系bind [ // EventName [\app\event\事件类::class] // 这里不能用数组会出错。 原来的写错了用了数组表示 EventName \app\event\事件类::class ] listen [ EventName [ \app\listener\监听类::class ] ],Controller内的业务代码Event::trigger(new 事件类());【重要】你会发现没有传递EventName参数。相当于trigger函数传递了哪个事件类就会反查到EventName建立与listen数组对应的关系然后再调用监听类里的handle($event)方法。这时候handle函数中的$event就是事件类的实例了可以直接调用事件类里定义的方法完成操作。其他监听类里只有一个handle方法当执行下面代码时会自动调用这个handle方法Event::listen(EventName, \app\listener\监听类::class); Event::trigger(EventName, $params);如果想交给其他类的某个方法可以用下面的方法Event::listen(EventName, [\path\to\other类::class, methodname]);如果不想定义这么多类监听时可以直接定义一个事件处理函数Event::listen(Email, function($param){ echo send email to . $param[name]; }); Event::trigger(Email, [name李四, age30]);

相关新闻

C++日期模拟算法:从原理到实战,掌握闰年判断与日期计算

C++日期模拟算法:从原理到实战,掌握闰年判断与日期计算

1. 项目概述:为什么我们需要“日期模拟算法”? 在C编程,尤其是算法竞赛和日常业务开发中,处理日期和时间是一个高频且容易出错的环节。你可能遇到过这样的需求:计算两个日期之间相差的天数、判断某天是星期几、推算某个…

2026/7/27 9:09:29阅读更多 →
信奥赛入门:从计算圆看顺序结构程序设计的核心要点与避坑指南

信奥赛入门:从计算圆看顺序结构程序设计的核心要点与避坑指南

很多刚接触信奥赛(信息学奥林匹克竞赛)的同学,在拿到第一道编程题时,常常会陷入一个误区:题目看起来很简单,比如“计算圆的面积”,不就是套用公式 π * r * r 吗?但为什么提交后总…

2026/7/27 9:09:29阅读更多 →
DM642硬件设计实战:从官方文档到稳定板卡的避坑指南

DM642硬件设计实战:从官方文档到稳定板卡的避坑指南

1. 项目概述:一份来自一线的DM642硬件设计实战地图如果你正准备或正在设计一块基于TI TMS320DM642 DSP的板卡,并且感觉官方文档浩如烟海、无从下手,那么你来对地方了。这份所谓的“资源指南”更像是一个官方索引,它告诉你“有什么…

2026/7/27 9:09:29阅读更多 →
TMS320C5506 DSP开发实战:内存映射寄存器与中断系统深度解析

TMS320C5506 DSP开发实战:内存映射寄存器与中断系统深度解析

1. 项目概述与核心价值如果你正在使用德州仪器(TI)的TMS320C5506 DSP进行开发,无论是做音频处理、通信系统还是其他实时信号处理应用,那么你肯定绕不开两个最核心的底层概念:内存映射寄存器和中断系统。这俩兄弟就像是…

2026/7/27 10:48:28阅读更多 →
NLP文本向量化:从One-Hot到Embedding的实战指南

NLP文本向量化:从One-Hot到Embedding的实战指南

1. 文本向量化:让机器理解人类语言的第一步 在自然语言处理(NLP)领域工作多年,我深刻体会到文本向量化是整个技术栈中最基础也最关键的环节。想象一下,当你试图让一个完全不懂中文的外国人理解"人工智能"这个…

2026/7/27 10:48:28阅读更多 →
DSP接口时序深度解析:从EMIF、McBSP到HPI的硬件设计避坑指南

DSP接口时序深度解析:从EMIF、McBSP到HPI的硬件设计避坑指南

1. 项目概述:为什么DSP接口时序是硬件工程师的“必修课”在嵌入式系统,尤其是数字信号处理(DSP)系统的硬件设计里,时序分析常常是那个最让人头疼,却又绕不开的核心环节。你可能已经熟练掌握了DSP的架构、外…

2026/7/27 10:48:28阅读更多 →
游戏性能测试完整回答:场景、设备、指标、基线与回归判定

游戏性能测试完整回答:场景、设备、指标、基线与回归判定

游戏性能测试完整回答:场景、设备、指标、基线与回归判定摘要:性能测试不是打开监控工具跑十分钟。本篇给出一套面试可直接使用的完整框架,并解释平均 FPS、帧时间、内存、温控和版本差异如何形成可信结论。标签:游戏性能测试、帧…

2026/7/27 10:48:28阅读更多 →
Python游戏开发实战:Pygame音频系统与数据驱动架构设计

Python游戏开发实战:Pygame音频系统与数据驱动架构设计

1. 项目概述:从方块到交响乐 几年前,当我第一次用Python的Pygame库拼凑出一个能移动的方块,看着它在简陋的网格上跳跃时,我就在想,什么时候能给它配上点“灵魂”。这个“灵魂”,很大程度上就来自于声音。一…

2026/7/27 10:48:28阅读更多 →
GPU并行计算实战:从ComputeShader核心原理到图像处理优化

GPU并行计算实战:从ComputeShader核心原理到图像处理优化

1. 项目概述:为什么ComputeShader是GPU计算的“特种部队”?如果你接触过Unity、Unreal这类现代游戏引擎,或者对图形编程稍有了解,大概率听说过Shader。传统上,Shader(着色器)是给GPU下达指令&am…

2026/7/27 10:46:28阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/27 1:14:34阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/27 1:14:52阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/27 1:14:56阅读更多 →
SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

SPI实战指南:从时钟模式到寄存器配置,解决嵌入式通信难题

1. 项目概述:从寄存器手册到实战指南 如果你手头有一份类似德州仪器(TI)TMS320x240xA系列DSP的SPI模块技术手册,看着里面密密麻麻的寄存器位定义、时序图和公式,是不是感觉头大?这份资料虽然权威&#xff0…

2026/7/27 0:00:24阅读更多 →
【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

【JAVA毕设源码分享】基于springboot的水果购物管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/27 0:00:24阅读更多 →
2007-2023年各市区县生态文明建设示范区DID

2007-2023年各市区县生态文明建设示范区DID

数据简介 自改革开放以来,我国依赖高投入、高资源消耗和高污染等传统发展模式实现了经济短期内的快速增长, 然而这也导致了严重的生态环境危机。因此,国家有力于推动企业高质量经济发展,协同生态保护的方针,从而从201…

2026/7/27 0:00:24阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/25 23:03:25阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/26 19:05:21阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/26 19:05:21阅读更多 →