>[info] 鉤子就好比衣架,插件就好比衣服,你把衣架放哪兒,衣服就會在哪兒。
通過后臺的插件設計工具,系統會自動創建對應的插件文件。
我們以前面創建的test插件為例,對應的文件:/plugins/test/test.php
## 插件的約束
每個插件文件必須繼承公共的插件控制器``app\common\controller\Plugins``,插件里面必須要有以下四個方法:
~~~
/**
* 安裝前的業務處理,可在此方法實現,默認返回true
* @return bool
*/
public function install()
{
// 在此寫業務代碼,沒有可不寫
return true;
}
/**
* 安裝后的業務處理,可在此方法實現,默認返回true
* @return bool
*/
public function installAfter()
{
// 在此寫業務代碼,沒有可不寫
return true;
}
/**
* 卸載前的業務處理,可在此方法實現,默認返回true
* @return bool
*/
public function uninstall()
{
// 在此寫業務代碼,沒有可不寫
return true;
}
/**
* 卸載后的業務處理,可在此方法實現,默認返回true
* @return bool
*/
public function uninstallAfter()
{
// 在此寫業務代碼,沒有可不寫
return true;
}
~~~
## 插件鉤子的添加與實現方法
>[info] 插件鉤子的索引變量名為 $hooks
~~~
/**
* @var array 插件鉤子索引
* 插件安裝后,新添加的鉤子方法需要重裝插件才會生效
*/
public $hooks = [
// 鉤子名稱 => 鉤子說明【系統鉤子,說明不用填寫】
'system_admin_tips',// 這是系統默認預埋的鉤子
];
~~~
>[info] system_admin_tips是系統預埋的鉤子,直接寫對應的實現方法即可
~~~
/**
* @var array 插件鉤子索引
* 插件安裝后,新添加的鉤子方法需要重裝插件才會生效
*/
public $hooks = [
// 鉤子名稱 => 鉤子說明【系統鉤子,說明不用填寫】
'system_admin_tips',// 這是系統默認預埋的鉤子
];
/**
* system_admin_tips鉤子方法
* @param $params
*/
public function systemAdminTips(&$params)
{
echo '我是系統預埋的鉤子';
}
~~~
>[info] 自定義鉤子example_hook
~~~
/**
* @var array 插件鉤子索引
* 插件安裝后,新添加的鉤子方法需要重裝插件才會生效
*/
public $hooks = [
// 鉤子名稱 => 鉤子說明【系統鉤子,說明不用填寫】
'example_hook' => '這是一個擴展的自定義鉤子',
];
/**
* example_hook鉤子方法
* @param $params
*/
public function example_hook(&$params)
{
$str = '我是一個自定義鉤子';
// 【示例】直接輸出字符串
echo $str;
// 【示例】模板賦值并輸出模板
$this->assign('str', $str);
// 模板文件完整路徑:/plugins/test/view/widget/example_hook.php
return $this->fetch('example_hook');
}
~~~
>[info] 鉤子的調用方法:runhook('example_hook')
>帶參數調用:runhook('example_hook', ['param1'=> '參數1', 'param2'=> '參數2'])