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.hqwc.cn/news/600119.html

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

相关文章

冯喜运:4.2外汇黄金黄金行情趋势分析,黄金原油独家操作建议。

黄金技术面解析:      黄金目前受俄乌局势和美联储降息预期影响,出现了猛烈拉升上涨,已经成功企稳了2200大关,并且步步新高,不断的刷新历史高位,避险买盘强劲。现在日线连阳拉升再次打开布林上轨空间&a…

Linux——静态库 共享库

1.库文件 1).库文件 库是一组预先编译好的方法的集合; Linux系统存储库的位置一般在/lib 和 /usr/lib (64位系统/usr/lib64) 库的头文件放在/usr/include 2).库的分类 静态库:libxxx.a(命名规则) 共享库:libxxx.so(命名规则) 3).准备文件: //add.c int add(int x,int y) { re…

4.7Qt

自由发挥应用场景实现一个登录窗口界面。 mywidget.cpp #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setWindowTitle("原神启动");this->setWindowIcon(QIcon("C:\\Users\\17212\\Pict…

外包干了25天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能…

【Java】maven是什么?

先看一下基本概念: ①Maven 翻译为"专家","内行"是跨平台的项目管理工具。 主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 ②项目构建 项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生成测试报…

【JavaEE】Spring Web-MVC

目录 Spring Web MVC 是什么 什么是Serlet 什么是MVC 什么是Spring MVC 使用Spring MVC 建立连接 RequestMapping 请求 传递单个参数 传递多个参数 传递对象 后端参数重命名 传递数组 传递集合 传递JSON数据 获取url参数-pathvariable 上传文件RequestPart 获…

C++【组合模式】

简单介绍 组合模式是一种结构型设计模式, 只有在可以将对象拆分为【树状结构】的情况下使用。并且像使用独立对象一样使用它们。 常用于表示与图形打交道的用户界面组件或代码的层次结构。 基础理解 Q:为什么要用组合模式 ? A:在…

SAP操作教程第14期:SAP B1如何进行自定义字段位置设置

服务对于企业而言永远是重中之重,想要提高服务呼叫效率,员工必须能够快速扫描单据和主数据中的重要信息,及时响应客户。那么,拥有适合企业业务流程的表单则是必不可少的前提。 所以,今天我们就来了解一下,在…

大模型应用解决方案:基于ChatGPT和GPT-4等Transformer架构的自然语言处理

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

Redis: 配置文件详解(Redis.conf)

文章目录 一、Units二、INCLUDES三、NETWORK四、GENERAL五、SECURITY六、LIMITS 一、Units 单位,配置大小单位,开头定义了一些基本的度量单位,只支持bytes,不支持bit,大小写不敏感 二、INCLUDES 包含,多…

如何明确的选择IT方向?

一、明确目标 作为初学者,先树立自己目标,找到自己感兴趣的IT行业,IT行业分很多种,听的最多次的无非不就是web前端工、程序员、后端、大数据、网络运维等。学习知识也是为了找到更好的工作,所以我建议先去boss直聘、五…

海外网红营销的UGC策略:激发用户创意,提升品牌知名度

在当今数字时代,品牌营销已经从传统的广告宣传转变为了与用户互动和参与密切相关的形式。UGC作为一种强大的营销策略,正在成为品牌提升知名度和美誉度的关键手段之一。尤其是通过海外网红的传播,UGC的影响力更是得到了进一步放大。本文Nox聚星…