事件
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\. 系統還內置了系統觸發的事件,只要滿足條件就會自動觸發;

事件描述參數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
- 參數請求驗證自定義和異常錯誤自定義