## 钩子的约束 每个插件钩子文件必须继承公共的插件控制器``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',// 这是系统默认预埋的钩子,可删除 ]; ~~~ ~~~ /** * @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 exampleHook(&$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'])