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