安裝
composer require zzstudio/think-addons
配置
生成配置
系統安裝后會自動在 config 目錄中生成 addons.php 的配置文件, 如果系統未生成可在命令行執行
php think addons:config
快速生成配置文件
公共配置
'addons' => [
// 是否自動讀取取插件鈎子配置信息(默認是開啟)
'autoload' => true,
// 當關閉自動獲取配置時需要手動配置hooks信息
'hooks' => [
// 可以定義多個鈎子
'testhook'=>'test' // 鍵為鈎子名稱,用於在業務中自定義鈎子處理,值為實現該鈎子的插件,
// 多個插件可以用數組也可以用逗號分割
],
'route' => [],
'service' => [],
];
或者在\config目錄中新建addons.php
,內容為:
<?php
return [
// 是否自動讀取取插件鈎子配置信息
'autoload' => false,
// 當關閉自動獲取配置時需要手動配置hooks信息
'hooks' => [
// 可以定義多個鈎子
'testhook'=>'test' // 鍵為鈎子名稱,用於在業務中自定義鈎子處理,值為實現該鈎子的插件,
// 多個插件可以用數組也可以用逗號分割
],
'route' => [],
'service' => [],
];
創建插件
創建的插件可以在view視圖中使用,也可以在php業務中使用
安裝完成后訪問系統時會在項目根目錄生成名為addons
的目錄,在該目錄中創建需要的插件。
下面寫一個例子:
創建test插件
在addons目錄中創建test目錄
創建鈎子實現類
在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' => 0, // 狀態
'author' => 'byron sampson',
'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');
}
}
創建插件配置文件
在test目錄中創建config.php類文件,插件配置文件可以省略。
<?php
return [
'display' => [
'title' => '是否顯示:',
'type' => 'radio',
'options' => [
'1' => '顯示',
'0' => '不顯示'
],
'value' => '1'
]
];
創建鈎子模板文件
在test->view目錄中創建info.html模板文件,鈎子在使用fetch方法時對應的模板文件。
<h1>hello tpl</h1>
如果插件中需要有鏈接或提交數據的業務,可以在插件中創建controller業務文件,
要訪問插件中的controller時使用addon_url生成url鏈接。
如下:
<a href="{:addons_url('Action/link')}">link test</a>
或
<a href="{:addons_url('test://Action/link')}">link test</a>
格式為:
test為插件名,Action為controller中的類名[多級控制器可以用.分割],link為controller中的方法
創建插件的controller文件
在test目錄中創建controller目錄,在controller目錄中創建Index.php文件 controller類的用法與tp6中的controller一致
<?php
namespace addons\test\controller;
class Index
{
public function link()
{
echo 'hello link';
}
}
使用鈎子
創建好插件后就可以在正常業務中使用該插件中的鈎子了 使用鈎子的時候第二個參數可以省略
模板中使用鈎子
<div>{:hook('testhook', ['id'=>1])}</div>
php業務中使用
只要是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);