thinkphp6中使用监听事件和事件订阅

目录

一:场景介绍

二:事件监听

三:配置订阅


一:场景介绍

在项目开发中有很多这样的场景,比如用户注册完了,需要通知到第三方或者发送消息。用户下单了,需要提示给客服等等。这些场景都有一个共同的特点是主流程和通知流程可以完全分离。通知流程是成功和失败不能影响到主流程。那么在thinkphp6中怎么实现这样的逻辑呢?可以使用事件订阅和事件监听。

二:事件监听

事件类可作为保存与事件相关信息的容器,如没有额外需求可以不需要定义

事件系统的所有操作都通过think\facade\Event类进行静态调用

1:配置监听
 

// 在event.php中绑定事件标识
'bind' => [
     'order_info' => \app\event\Order::class
 ],
// 一个事件可以有很多不相关的监听器   
'listen' => [
   'order_info' => [
       \app\listener\ListenerUser::class,
       \app\listener\ListenerGoods::class
   ]
],

// 或者可以这样动态绑定

Event::bind(['order_info' => \app\event\Order::class]);

// 以下方式都可以触发事件
Event::trigger('order_info');
Event::trigger(\app\event\Order::class);
Event::trigger(new \app\event\Order('Order初始化'));

不定义事件类时
'bind' => [
     
 ],

'listen' => [
   'order_info' => [
       \app\listener\ListenerUser::class,
       \app\listener\ListenerGoods::class
   ]
],

// 以下方式触发事件

Event::trigger('order_info');

// 这样就可以触发事件
Event::trigger(\app\event\Order::class);
Event::trigger(new \app\event\Order('Order初始化'));

三:配置订阅

我们以用户注册为例,详细介绍了配置流程。这里的场景是我们需要在用户注册完,把用户信息推送到第三方平台。

1:首先注册事件订阅者

app目录下的event.php,我们定义一个用户的类,里面可以写和用户有关的订阅方法

也可以动态注册

Event::subscribe(\app\subscribe\SubscribeUser::class);

这里的类,可以定义多个,每个订阅类在这里注册以后,都可以实现监听

2: 写用户注册的推送逻辑

通过事件订阅机制,在一个监听器中监听多个事件,这里用户注册完可以定义推送逻辑,还可以定义其他逻辑,多个方法都可以监听到。

3:员工注册事件


    event('delete_user', ['ids' => $idArr,'user_arr' => $listArr]);

或者

Event::trigger('delete_user');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809728.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重塑未来医疗:用AI挑战病例分析和误诊率的边界

市场分析 当前医疗行业正处于关键的转型期。伴随着人口老龄化速度的加快,例如在2020年,全球65岁及以上的老年人口比例已经超过了8.5%(联合国数据),并且预计到2050年这一数字将翻倍。此外,全球性健康问题也在…

SAP_ABAP_MM_PO审批_队列实践SMQ1

SAP ABAP 顾问(开发工程师)能力模型-CSDN博客文章浏览阅读1k次。目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提供超级燃料!https://blog.csdn.net/java_zhong1990/article/det…

【春秋招专场】央国企——国家电网

国家电网目录 1.公司介绍1.1 业务1.2 组成 2.公司招聘2.1 招聘平台2.2 考试安排2.3 考试内容 3.公司待遇 1.公司介绍 1.1 业务 国家电网公司(State Grid Corporation of China,简称SGCC)是中国最大的国有企业之一,主要负责中国绝…

DS数模-Mathorcup妈妈杯C题思路

2024Mathorcup数学建模挑战赛(妈妈杯)C题保姆级分析完整思路代码数据教学 C题题目:物流网络分拣中心货量预测及人员排班 接下来我们将按照题目总体分析-背景分析-各小问分析的形式来 总体分析:题目要求我们处理的是一个关于物流…

在实体类中使用JSONObject对象

有时候我们的业务需求可能字段是json格式,这个时候我们的实体类就对应的也应该是json格式,需要使用到JSONObject这个对象,但是可能会使用不了这个对象,那接下来我将简单介绍如何使用这个对象。 以下为我的实体类中的某个字段&…

什么是云原生

什么是云原生 云原生的定义 aws: 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代公司希望构建高度可伸缩、灵活和有弹性的应用程序,以便能够快速更新以满足客户需求。为此,他们使用了支持云基础设施上应用程序开发的现…

QT:QT实现TCP协议

1.服务器端 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer>//服务器端类 #include <QMessageBox>//消息对话框 #include <QTcpSocket>//客户端类 #include <QList>//链表容器类 QT_BEGIN_NAMESPACE nam…

cat,tac,nl,more,less,head,tail,od,touch-读书笔记(五)

文件内容查阅 cat 由第一行开始显示文件内容 tac 从最后一行开始显示&#xff0c;可以看出 tac 是 cat 的倒着写&#xff01; nl 显示的时候&#xff0c;顺道输出行号&#xff01; more 一页一页的显示文件内容 less 与 more 类似&#xff0c;但是比 more 更好的是&#x…

OpenAI 推出新网络爬虫GPTBot,为GPT-5做准备

目录 一、GPTBot是什么&#xff1f;它是如何工作的&#xff1f;二、GPTBot 与 Google Bot 等搜索引擎网络爬虫有何不同&#xff1f;三、GPTBot 与 Perplexity AI 的网络爬虫有何不同&#xff1f;四、允许 GPTBot 爬取有哪些风险和好处&#xff1f;4.1 允许 GPTBot 的好处4.2 允…

笔记-Building Apps with the ABAP RESTful Application Programming Model-Week3

Week3 Unit 1: The Enhanced Business Scenario 本节介绍了将要练习的demo的业务场景,在前两周成果的基础上,也就是只读列表,也可以说是报表APP基础上启用了事务能力,也就是CURD以及自定义业务功能的能力,从创建基本的behavior definition,然后behavior definition proj…

Blob 转 Uint8Array、Uint8Array 转 Blob、String 转 Uint8Array、Uint8Array 转 String、异或

Blob 转 Uint8Array blobToArrayBuffer(blob, callback) {let reader new FileReader();reader.onload function() {return callback(this.result);}reader.readAsArrayBuffer(blob); }Uint8Array 转 Blob // 假设我们有一个Uint8Array const uint8Array new Uint8Array([…

Python(8):文件的IO读写操作(操作普通文件/csv/excel)

文章目录 一、文件的IO读写操作1.常用的文件读取标志符2.普通文件的读操作 二、csv文件的读写操作1.读取操作2.读取时候跳过某一行3.列表方式写入csv文件4.字典方式写入csv文件 三、excel的数据操作&#xff08;非pandas模块&#xff09;1.读取excel的某个sheet的某一行的某一列…

【C++】stringstream

stringstream 定义于头文件 <sstream>&#xff0c;它其实是个别名&#xff0c;具体定义如下&#xff1a; typedef basic_stringstream<char> stringstream;<sstream> 定义了三个类&#xff1a;istringstream、ostringstream 和 stringstream&#xff0c;分别…

【WPF应用41】WPF中的Expander控件详解

Windows Presentation Foundation&#xff08;WPF&#xff09;中的Expander控件是一个用于显示详细信息的交互式UI元素。它允许用户通过点击标题来展开或折叠内容区域。Expander控件通常用于在界面上组织内容&#xff0c;提供一种可见/隐藏的功能&#xff0c;以帮助用户专注于当…

java数据结构与算法刷题-----LeetCode268. 丢失的数字

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 数学位运算 数学 解题思路&#xff1a;时间复杂度O( n n n)&…

锐腾授权世强硬创代理导热硅脂等热界面材料,最大化降低界面热阻

随着热界面材料下游新兴应用领域如数据中心、新能源汽车、可穿戴设备等的高速发展&#xff0c;其散热需求也将同步上升&#xff0c;国内热界面材料行业市场规模呈现上涨态势。 在此趋势下&#xff0c;国内锐腾新材料制造&#xff08;苏州&#xff09;有限公司&#xff08;下称…

从零到部署指南:Ubuntu上安装Boost和Crow库

1.安装boost 在安装Crow之前&#xff0c;需要确保您的系统中已经安装了Boost库。以下是Boost库安装步骤&#xff1a; 首先&#xff0c;从Boost官方网站或通过特定的链接下载Boost的源码&#xff0c;boost源码具体可参看这个链接&#xff1a; https://blog.csdn.net/duan199201…

Qt项目.pro文件配置详解

# Qt项目.pro文件配置详解#QT模块引入部分: QT core gui # 这一行指定了当前项目需要用到的Qt模块&#xff0c;其中core是基础模块&#xff0c;包含了Qt的基础功能&#xff1b;gui则是图形用户界面模块&#xff0c;用于创建和管理GUI应用。#条件编译部分: greaterThan(QT_MAJO…

vue3+高德地图+turfjs实现等压线,色斑图(用于显示气象,环境等地图场景)

首先是turf.js(英文官网),也有中文网不过也就目录翻译了一下. 高德官网自行获得key 使用turf的isobands api实现. 数据: 需要准备geojson格式经纬度信息业务值(比如温度,高度,光照只要是number值什么数据都可以) 国内各地区geojson数据点这里获得 参考的是这位大佬写的内容 我…

洛谷 - P1187 3D模型

3D模型 题目描述 一座城市建立在规则的 n m n \times m nm 网格上&#xff0c;并且网格均由 1 1 1 \times 1 11 正方形构成。在每个网格上都可以有一个建筑&#xff0c;建筑由若干个 1 1 1 1 \times 1 \times 1 111 的立方体搭建而成&#xff08;也就是所有建筑的底部…