## 安裝[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E5%AE%89%E8%A3%85)
> composer require zzstudio/think-addons
## [](https://github.com/zz-studio/think-addons#%E9%85%8D%E7%BD%AE)配置[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E9%85%8D%E7%BD%AE)
### [](https://github.com/zz-studio/think-addons#%E7%94%9F%E6%88%90%E9%85%8D%E7%BD%AE)生成配置[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E7%94%9F%E6%88%90%E9%85%8D%E7%BD%AE)
系統安裝后會自動在 config 目錄中生成 addons.php 的配置文件, 如果系統未生成可在命令行執行
~~~html
php think addons:config
~~~
快速生成配置文件
### [](https://github.com/zz-studio/think-addons#%E5%85%AC%E5%85%B1%E9%85%8D%E7%BD%AE)公共配置[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E5%85%AC%E5%85%B1%E9%85%8D%E7%BD%AE)
```
'addons' => [
// 是否自動讀取取插件鉤子配置信息(默認是開啟)
'autoload' => true,
// 當關閉自動獲取配置時需要手動配置hooks信息
'hooks' => [ // 可以定義多個鉤子
'testhook'\=>'test'
// 鍵為鉤子名稱,用于在業務中自定義鉤子處理,值為實現該鉤子的插件,
// 多個插件可以用數組也可以用逗號分割 ],
'route' => [],
'service' => [],
];
```
或者在\\config目錄中新建`addons.php`,內容為:
```
<?php
return [
// 是否自動讀取取插件鉤子配置信息
'autoload' => false,
// 當關閉自動獲取配置時需要手動配置hooks信息
'hooks' => [
// 可以定義多個鉤子
'testhook'\=>'test' // 鍵為鉤子名稱,用于在業務中自定義鉤子 處理,值為實現該鉤子的插件,// 多個插件可以用數組也可以用逗號 分割
],
'route' => [],
'service' => [],
]
?>
```
## 創建插件[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E5%88%9B%E5%BB%BA%E6%8F%92%E4%BB%B6)
> 創建的插件可以在view視圖中使用,也可以在php業務中使用
安裝完成后訪問系統時會在項目根目錄生成名為`addons`的目錄,在該目錄中創建需要的插件。
下面寫一個例子:
### [](https://github.com/zz-studio/think-addons#%E5%88%9B%E5%BB%BAtest%E6%8F%92%E4%BB%B6)創建test插件[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E5%88%9B%E5%BB%BAtest%E6%8F%92%E4%BB%B6)
> 在addons目錄中創建test目錄
### [](https://github.com/zz-studio/think-addons#%E5%88%9B%E5%BB%BA%E9%92%A9%E5%AD%90%E5%AE%9E%E7%8E%B0%E7%B1%BB)創建鉤子實現類[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E5%88%9B%E5%BB%BA%E9%92%A9%E5%AD%90%E5%AE%9E%E7%8E%B0%E7%B1%BB)
> 在test目錄中創建 Plugin.php 類文件。注意:類文件首字母需大寫
```
<?php
namespace addons\\test; ? ?// 注意命名空間規范
use think\\Addons;
/\*\*
?\* 插件測試
\* @author byron sampson
?\*/
class Plugin extends Addons // 需繼承think\\Addons類
{
// 該插件的基礎信息
public $info \= \[
'name' \=> 'test', ? ?// 插件標識
'title' \=> '插件測試', ? ?// 插件名稱
'description' \=> 'thinkph6插件測試', ? ?// 插件簡介
'status' \=> 1, ? ?// 狀態
'author' \=> 'yms',
'version' \=> '0.1'
? ? \];
/\*\*
? ? ?\* 插件安裝方法
\* @return bool
? ? ?\*/
public function install()
? ? {
return true;
? ? }
/\*\*
? ? ?\* 插件卸載方法
\* @return bool
? ? ?\*/
public function uninstall()
? ? {
return true;
? ? }
/\*\*
? ? ?\* 實現的testhook鉤子方法
\* @return mixed
? ? ?\*/
public function testhook($param)
? ? {
// 調用鉤子時候的參數信息
//print\_r($param);
// 當前插件的配置信息,配置信息存在當前目錄的config.php文件中,見下方
//print\_r($this->getConfig());
// 可以返回模板,模板文件默認讀取的為插件目錄中的文件。模板名不能為空!
return $this\->fetch('info');
? ? }
}
```
### 創建插件配置文件[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E5%88%9B%E5%BB%BA%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)
> 在test目錄中創建config.php類文件,插件配置文件可以省略。
```
<?php
return \[
'display' \=> \[
'title' \=> '是否顯示:',
'type' \=> 'radio',
'options' \=> \[
'1' \=> '顯示',
'0' \=> '不顯示'
? ? ? ? \],
'value' \=> '1'
? ? \]
\];
```
### 創建鉤子模板文件[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E5%88%9B%E5%BB%BA%E9%92%A9%E5%AD%90%E6%A8%A1%E6%9D%BF%E6%96%87%E4%BB%B6)
> 在test->view目錄中創建info.html模板文件,鉤子在使用fetch方法時對應的模板文件。
```
hello tpl 如果插件中需要有鏈接或提交數據的業務,可以在插件中創建controller業務文件, 要訪問插件中的controller時使用addon\_url生成url鏈接。 如下: link test 或 link test 格式為: test為插件名,Action為controller中的類名\[多級控制器可以用.分割\],link為controller中的方法
```
### 創建插件的controller文件[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E5%88%9B%E5%BB%BA%E6%8F%92%E4%BB%B6%E7%9A%84controller%E6%96%87%E4%BB%B6)
> 在test目錄中創建controller目錄,在controller目錄中創建Index.php文件 controller類的用法與tp6中的controller一致
```
<?php namespace addons\\test\\controller; class Index { public function link() { echo 'hello link'; } }
```
## 使用鉤子[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#%E4%BD%BF%E7%94%A8%E9%92%A9%E5%AD%90)
> 創建好插件后就可以在正常業務中使用該插件中的鉤子了 使用鉤子的時候第二個參數可以省略
### [](https://github.com/zz-studio/think-addons#%E6%A8%A1%E6%9D%BF%E4%B8%AD%E4%BD%BF%E7%94%A8%E9%92%A9%E5%AD%90)模板中使用鉤子
```
{:hook('testhook', \['id'\=>1\])}
```
### php業務中使用[#](https://www.cnblogs.com/zhangxilong/p/15958978.html#php%E4%B8%9A%E5%8A%A1%E4%B8%AD%E4%BD%BF%E7%94%A8)
> 只要是thinkphp6正常流程中的任意位置均可以使用
```
hook('testhook', \['id'=>1\])
```
### 插件公共方法
```
/\*\* \* 處理插件鉤子 \* @param string $event 鉤子名稱 \* @param array|null $params 傳入參數 \* @param bool $once 是否只返回一個結果 \* @return mixed \*/ function hook($event, $params = null, bool $once = false); /\*\* \* 讀取插件的基礎信息 \* @param string $name 插件名 \* @return array \*/ function get\_addons\_info($name); /\*\* \* 獲取插件Plugin的單例 \* @param string $name 插件名 \* @return mixed|null \*/ function get\_addons\_instance($name); /\*\* \* 插件顯示內容里生成訪問插件的url \* @param $url 在插件控制器中可忽略插件名,在非插件中生成時需指定插件名。例:插件名://控制器/方法 \* @param array $param \* @param bool|string $suffix 生成的URL后綴 \* @param bool|string $domain 域名 \* @return bool|string \*/ function addons\_url($url = '', $param = \[\], $suffix = true, $domain = false);
```
- 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
- 參數請求驗證自定義和異常錯誤自定義