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');

相关推荐

  1. TP6 事件绑定、监听订阅

    2024-04-09 14:42:03       29 阅读
  2. ThinkPHP6事件系统使用指南

    2024-04-09 14:42:03       24 阅读
  3. ThinkPHP6使用GatewayWorker

    2024-04-09 14:42:03       54 阅读
  4. SpringEvent事件发布&订阅Demo

    2024-04-09 14:42:03       24 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-09 14:42:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-09 14:42:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-09 14:42:03       82 阅读
  4. Python语言-面向对象

    2024-04-09 14:42:03       91 阅读

热门阅读

  1. 安卓权限预置设置

    2024-04-09 14:42:03       31 阅读
  2. LeetCode热题Hot100 - 有效的括号

    2024-04-09 14:42:03       38 阅读
  3. 2024.4.8作业

    2024-04-09 14:42:03       31 阅读
  4. 3.10 Python数据类型转换

    2024-04-09 14:42:03       31 阅读
  5. c#有dll源码,整合到自己的exe中

    2024-04-09 14:42:03       39 阅读
  6. SQL Server 数据类型

    2024-04-09 14:42:03       33 阅读
  7. 目标 url 存在 host 头攻击漏洞

    2024-04-09 14:42:03       33 阅读
  8. 软件测试与QA的区别

    2024-04-09 14:42:03       36 阅读
  9. 题目:学习使用按位与 & 。

    2024-04-09 14:42:03       25 阅读
  10. MYSQL 5.7重置root密码

    2024-04-09 14:42:03       30 阅读
  11. idea 使用springboot helper 创建springboot项目

    2024-04-09 14:42:03       25 阅读
  12. git lfs如何使用

    2024-04-09 14:42:03       29 阅读
  13. 云数据库AWS Aurora(一)

    2024-04-09 14:42:03       33 阅读
  14. 关于ros中的回旋函数

    2024-04-09 14:42:03       30 阅读