插件控制器也可分为后台控制器(admin)和前台控制器(home),如果你的插件不需要用到钩子功能而又需要分前后台,还是建议你用模块的方式来开发。 >[danger]在开始插件开发前,一定要了解清楚插件的目录结构。 ~~~ /plugins/test/ ├─admin 插件后台控制器目录(非必须) │ ├─Index.php 初始化的默认控制器 ├─home 插件前台控制器目录(非必须) │ ├─Index.php 初始化的默认控制器 ├─model 插件模型目录(非必须) ├─sql 模块SQL文件目录(非必须) │ ├─install.sql 安装SQL文件 │ ├─uninstall.sql 卸载SQL文件 ├─validate 验证器目录(非必须) ├─view 插件模板目录(非必须) │ ├─admin 插件后台模板目录 │ │ ├─index 控制器模板目录(以控制器命名) │ │ │ ├─index.php 模板文件(示例) │ ├─home 插件前台模板目录 │ │ ├─index 控制器模板目录(以控制器命名) │ │ │ ├─index.php 模板文件(示例) │ ├─widget 插件钩子模板目录 │ │ │ ├─system_hook.php 钩子模板(示例) ├─info.php 插件基本信息 ├─menu.php 插件后台管理菜单节点 ├─test.php 插件与钩子的实现方法 ~~~ ## 后台控制器(/plugins/test/admin/) >[info] 问:什么情况下需要后台控制器? 答:当你的插件需要用到后台管理某些数据的时候,你就可以创建后台控制器来进行数据的管理。 创建Index控制器``/plugins/test/admin/Index.php``,所有插件后台控制器必须继承`` app\common\controller\Common`` 控制器,控制器里面的数据库增删改查、验证等均跟ThinkPHP5完全一样。示例代码如下: ~~~php <?php namespace plugins\test\admin; use app\common\controller\Common; defined('IN_SYSTEM') or die('Access Denied'); /** * [测试插件]后台Index控制器 * @package plugins\test\admin */ class Index extends Common { public function show() { $data = []; $this->assign('data', $data); return $this->fetch(); } } ~~~ >[info] 访问地址:/admin.php/admin/plugins/run?_p=test&_c=index&_a=show 参数说明:_p=插件名&_c=控制器名&_a=方法名 ## 前台控制器(/plugins/test/home/) >[info] 问:什么情况下需要前台控制器? 答:当你的插件需要有一个或多个前台展示页面时,就可以通过前台控制器来实现。 创建Index控制器``/plugins/test/home/Index.php``,所有插件前台控制器必须继承`` app\common\controller\Common`` 控制器,控制器里面的数据库增删改查、验证等均跟ThinkPHP5完全一样。示例代码如下: ~~~php <?php namespace plugins\test\home; use app\common\controller\Common; defined('IN_SYSTEM') or die('Access Denied'); /** * [测试插件]前台Index控制器 * @package plugins\test\home */ class Index extends Common { public function detail() { $data = []; $this->assign('data', $data); return $this->fetch(); } } ~~~ >[info] 前台控制器访问路径,支持两种路径格式: >格式1:/plugins/插件名/控制器名/方法名 >格式2:/plugins.php?_p=插件名&_c=控制器名&_a=方法名