>[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'])