完全掌握thinkphp的事件绑定、监听和订阅

发布时间 - 2022-04-13 00:00:00    点击率:

本篇文章给大家带来了关于thinkphp的相关知识,其中主要介绍了事件绑定、监听、订阅的相关问题,事件相比较中间件的优势是事件比中间件更加精准定位,下面一起来看一下,希望对大家有帮助。

推荐学习:《PHP视频教程》

事件是什么

事件相比较中间件的优势是事件比中间件更加精准定位(或者说粒度更细),并且更适合一些业务场景的扩展。例如,我们通常会遇到用户注册或者登录后需要做一系列操作,通过事件系统可以做到不侵入原有代码完成登录的操作扩展,降低系统的耦合性的同时,还能完成业务的需求。

TP6中事件的使用

官网的解释,没有实例,这里简单的告诉大家如何使用,会使用之后再去发现更多操作

1.事件监听

  • 命令行生成监听 php think make:listener UserLogin

一般建议直接在事件定义文件(event.php)中定义对应事件的监听。

return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
    'listen'  =>    [
        'UserLogin'    =>    ['app\listener\UserLogin'],
        // 更多事件监听
    ],
];

2.事件订阅

  • 命令行php think make:subscribe User
    默认会生成app\subscribe\User类,或者你可以指定完整类名生成。

3.自定义订阅

如果希望自定义订阅方式(或者方法规范),可以定义subscribe方法实现。

listen('UserLogin', [$this,'onUserLogin']);
        $event->listen('UserLogout',[$this,'onUserLogout']);
    }
}

然后在事件定义文件注册事件订阅者

return [
    'bind'    =>    [
        'UserLogin' => 'app\event\UserLogin',
        // 更多事件绑定
    ],
    'listen'  =>    [
        'UserLogin'    =>    ['app\listener\UserLogin'],
        // 更多事件监听
    ],
    'subscribe'    =>    [
       'app\subscribe\User',
        // 更多事件订阅
    ],
];

事件触发

// 触发UserLogin事件 用于执行用户登录后的一系列操作
Event::trigger('UserLogin');
或者使用助手函数
event('UserLogin');

推荐学习:《PHP视频教程》


# thinkphp  # php  # 中间件  # Event  # 事件  # 绑定  # 自定义  # 命令行  # 相比较  # 你可以  # 还能  # 带来了  # 给大家  # 再去  # 或者说 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 音乐网站服务器如何优化API响应速度?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Firefox Developer Edition开发者版本入口  零基础网站服务器架设实战:轻量应用与域名解析配置指南  详解阿里云nginx服务器多站点的配置  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  如何确保FTP站点访问权限与数据传输安全?  如何在VPS电脑上快速搭建网站?  Laravel Session怎么存储_Laravel Session驱动配置详解  Laravel Fortify是什么,和Jetstream有什么关系  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何实现用户注册和登录?(Auth脚手架指南)  JavaScript Ajax实现异步通信  Java垃圾回收器的方法和原理总结  js实现点击每个li节点,都弹出其文本值及修改  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  html如何与html链接_实现多个HTML页面互相链接【互相】  如何在宝塔面板中创建新站点?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  Linux系统命令中tree命令详解  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  使用Dockerfile构建java web环境  如何自定义建站之星模板颜色并下载新样式?  如何在建站之星绑定自定义域名?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Laravel集合Collection怎么用_Laravel集合常用函数详解  HTML 中如何正确使用模板变量为元素的 name 属性赋值  Python高阶函数应用_函数作为参数说明【指导】  EditPlus 正则表达式 实战(3)  Laravel怎么实现模型属性的自动加密  Laravel如何处理文件下载请求?(Response示例)  如何快速选择适合个人网站的云服务器配置?  EditPlus中的正则表达式实战(5)  Python文件异常处理策略_健壮性说明【指导】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  如何实现javascript表单验证_正则表达式有哪些实用技巧  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何在IIS中新建站点并解决端口绑定冲突?  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  如何用PHP快速搭建CMS系统?  如何用5美元大硬盘VPS安全高效搭建个人网站?  如何在阿里云虚拟服务器快速搭建网站?  如何打造高效商业网站?建站目的决定转化率  如何在 React 中条件性地遍历数组并渲染元素  百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  详解Android——蓝牙技术 带你实现终端间数据传输