事件
1\. 事件和中间件有一点相似,只不过事件更加的精准定位更细腻的业务场景;
2\. 事件可定义:事件类、事件监听类、事件订阅类;
3\. 我们先创建一个测试事件的类:TestEvent.php,手动创建一个测试类;
```
`public``function __construct()`
`{`
`//注册监听器`
`Event::listen(``'TestListen'``, function ($param) {`
`echo``'我是监听器,我被触发了!'``.$param;`
`});`
`}`
`public``function info()`
`{`
`echo``'登录前准备!'``;`
`Event::trigger(``'TestListen'``,``'ok'``);``//触发监听器`
`event``(``'TestListen'``);``//助手函数触发`
`}`
```
4\. 我们也可以使用监听类来设计监听器,使用命令行创建;
```
`php think make:listener TestListen`
`public``function info()`
`{`
`echo``'登录前准备!'``;`
`Event::listen(``'TestListen'``, TestListen::``class``);``//这句可以定义到配置文件`
`Event::trigger(``'TestListen'``);`
`}`
```
5\. 在 app/event.php 中,listen 是配置监听类的,配置方式如下:
```
`'listen'``=> [`
`'TestListen'``=> [\app\listener\TestListen::``class``]`
`],`
```
6\. 而监听类被触发会自动执行 handle()方法,实现监听功能;
```
`public``function handle($``event``)`
`{`
`echo``'我是监听类!'``.$``event``;`
`}`
```
7\. 系统还内置了系统触发的事件,只要满足条件就会自动触发;
![](https://img.kancloud.cn/4f/db/4fdb708489da8ec1f3816df22dd9a8b1_684x281.png)
事件描述参数AppInit应用初始化标签位无HttpRun应用开始标签位无HttpEnd应用结束标签位当前响应对象实例LogWrite日志write方法标签位当前写入的日志信息RouteLoaded路由加载完成无
8\. 事件监听类,可以同时监听多个监听类,只要绑定到一个标识符即可;
```
`'TestListen'``=> [`
`\app\listener\TestListen::``class``,`
`\app\listener\TestOne::``class``,`
`\app\listener\TestTwo::``class`
`]`
```
9\. 对于需要多个监听,监听类不够灵活,而且类会创建很多,可以使用订阅类;
10\. 订阅类就是将监听事件作为内部的方法用 on+方法名来实现;
```
`php think make:subscribe UserSub`
`class``UserSub`
`{`
`public``function onUserLogin(){`
`echo``'处理登录后的监听!'``;`
`}`
`public``function onUserLogout(){`
`echo``'处理退出后的监听!'``;`
`}`
`}`
```
11\. 然后,我们直接去 app/event.php 注册一下;
```
`'subscribe'``=> [`
`'UserSub'``=> \app\subscribe\UserSub::``class``,`
`],`
```
12\. 然后,两个方法分别监听两个事件方法,直接调用方法名即可;
```
`public``function login(){`
`echo``'登录成功!'``;`
`Event::trigger(``'UserLogin'``);`
`}`
`public``function logout(){`
`echo``'退出成功!'``;`
`Event::trigger(``'UserLogout'``);`
`}`
```
13\. 对于事件类,很少有场景需要使用它,毕竟系统提供的各种精确方案较多;
```
`php think make:``event``UserEvent`
`class``UserEvent`
`{`
`public``function __construct()`
`{`
`echo``'我是事件类!'``;`
`}`
`}`
`Event::trigger(``new``UserEvent());`
```
多应用模式
1\. 由于多应用模式属于扩展,我们需要额外安装;
```
composer require topthink/think-multi-app
```
2\. 安装后,创建 index 和 admin 两个应用目录文件夹;
3\. 只要将 controller 和 model 移入即可,修改相应的命名空间;
4\. 将 view 也增加 index 和 admin 两个应用目录文件夹,移入相应文件夹;
5\. 默认的应用为 index,在 app.php 修改即可;
```
`// 默认应用`
`'default_app'``=>``'index'``,`
```
6\. 我们可以做应用映射,比如将 admin 目录映射为 think,admin 废弃;
```
`// 应用映射(自动多应用模式有效)`
`'app_map'``=> [`
`'think'``=>``'admin'`
`],`
```
7\. 我们也可以做域名绑定,比如,后台用域名绑定,直接访问;
```
`// 域名绑定(自动多应用模式有效)`
`'domain_bind'``=> [`
`'news.abc.com'``=>``'admin'``,`
`'*'``=>``'index'`
`],`
```
8\. 路由修改:需要在应用目录单独建立路由,内部编码不需要更改;
- thinkphp6执行流程(一)
- php中use关键字用法详解
- Thinkphp6使用腾讯云发送短信步骤
- 路由配置
- Thinkphp6,static静态资源访问路径问题
- ThinkPHP6.0+ 使用Redis 原始用法
- smarty在thinkphp6.0中的最佳实践
- Thinkphp6.0 搜索器使用方法
- 从已有安装包(vendor)恢复 composer.json
- tp6with的用法,表间关联查询
- thinkphp6.x多对多如何添加中间表限制条件
- thinkphp6 安装JWT
- 缓存类型
- 请求信息和HTTP头信息
- 模型事件用法
- 助手函数汇总
- tp6集成Alipay 手机和电脑端支付的方法
- thinkphp6使用jwt
- 6.0session cookie cache
- tp6笔记
- TP6(thinkphp6)队列与延时队列
- thinkphp6 command(自定义指令)
- command(自定义指令)
- 本地文件上传
- 缓存
- 响应
- 公共函数配置
- 七牛云+文件上传
- thinkphp6:访问多个redis数据源(thinkphp6.0.5 / php 7.4.9)
- 富文本编辑器wangEditor3
- IP黑名单
- 增删改查 +文件上传
- workerman 定时器操作控制器的方法
- 上传文件到阿里云oss
- 短信或者邮箱验证码防刷代码
- thinkphp6:访问redis6(thinkphp 6.0.9/php 8.0.14)
- 实现关联多个id以逗号分开查询数据
- thinkphp6实现邮箱注册功能的细节和代码(点击链接激活方式)
- 用mpdf生成pdf文件(php 8.1.1 / thinkphp v6.0.10LTS )
- 生成带logo的二维码(php 8.1.1 / thinkphp v6.0.10LTS )
- mysql数据库使用事务(php 8.1.1 / thinkphp v6.0.10LTS)
- 一,创建过滤IP的中间件
- 源码解析请求流程
- 验证码生成
- 权限管理
- 自定义异常类
- 事件监听event-listene
- 安装与使用think-addons
- 事件与多应用
- Workerman 基本使用
- 查询用户列表按拼音字母排序
- 扩展包合集
- 查询用户数据,但是可以通过输入用户昵称来搜索用户同时还要统计用户的文章和粉丝数
- 根据图片的minetype类型获取文件真实拓展名思路
- 到处excel
- 用imagemagick库生成缩略图
- 生成zip压缩包并下载
- API 多版本控制
- 用redis+lua做限流(php 8.1.1 / thinkphp v6.0.10LTS )
- 【thinkphp6源码分析三】 APP类之父, 容器Container类
- thinkphp6表单重复提交解决办法
- 小程序授权
- 最简单的thinkphp6导出Excel
- 根据访问设备不同访问不同模块
- 服务系统
- 前置/后置中间件
- 给接口api做签名验证(php 8.1.1 / thinkphp v6.0.10LTS )
- 6实现邮箱注册功能的细节和代码(点击链接激活方式)
- 使用前后端分离的验证码(thinkphp 6.0.9/php 8.0.14/vue 3.2.26)
- 前后端分离:用jwt+middleware做用户登录验证(php 8.1.1 / thinkphp v6.0.10LTS )
- vue前后端分离多图上传
- thinkphp 分组、页面跳转与ajax
- thinkphp6 常用方法文档
- 手册里没有的一些用法
- Swagger 3 API 注释
- PHP 秒级定时任务
- thinkphp6集成gatewayWorker(workerman)实现实时监听
- thinkphp6按月新增数据表
- 使用redis 实现消息队列
- api接口 统一结果返回处理类
- 使用swoole+thinkphp6.0+redis 结合开发的登录模块
- 给接口api做签名验证
- ThinkPHP6.0 + UniApp 实现小程序的 微信登录
- ThinkPHP6.0 + Vue + ElementUI + axios 的环境安装到实现 CURD 操作!
- 异常$e
- 参数请求验证自定义和异常错误自定义