多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 创建test插件 >在addons目录中创建test目录 ## 创建插件信息文件 >在test目录中创建info.ini文件 ```language name = test title = 测试插件 desc = 测试插件 status = 1 author = 官方 version = 1.0 ``` ## 创建钩子实现类 >在test目录中创建 Plugin.php 类文件。注意:类文件首字母需大写 ```language <?php namespace addons\test; // 注意命名空间规范 use think\Addons; /** * 插件测试 * @author byron sampson */ class Plugin extends Addons // 需继承think\Addons类 { /** * 插件安装方法 * @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类文件,插件配置文件可以省略。 ```language <?php return [ 'display' => [ 'title' => '是否显示:', 'type' => 'radio', 'options' => [ '1' => '显示', '0' => '不显示' ], 'value' => '1' ] ]; ``` ## 创建钩子模板文件 >在test->view目录中创建info.html模板文件,钩子在使用fetch方法时对应的模板文件。 ```language <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一致 ```language <?php namespace addons\test\controller; class Index { public function link() { echo 'hello link'; } } ``` ## 使用钩子 >创建好插件后就可以在正常业务中使用该插件中的钩子了 使用钩子的时候第二个参数可以省略 ## 模板中使用钩子 ```language <div>{:hook('testhook', ['id'=>1])}</div> ``` ## php业务中使用 >只要是thinkphp6正常流程中的任意位置均可以使用 ```language hook('testhook', ['id'=>1]) ``` ## 插件公共方法 ```language /** * 处理插件钩子 * @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 * @return bool|string */ function addon_url($url = '', $param = []); ``` ## 插件目录结构 ```language addons 插件目录 │ ├─text test插件 | | ├─controller 控制器目录 | | ├─model 模型目录 | | ├─validate 验证器目录 | | ├─libaray 扩展sdk | | ├─config.php 配置文件 | | ├─Plugin.php 钩子类 | | ├─info.ini 插件信息 ```