插件控制器也可分为后台控制器(admin)和前台控制器(home),如果你的插件不需要用到钩子功能而又需要分前后台,还是建议你用模块的方式来开发。
>[danger]在开始插件开发前,一定要了解清楚插件的目录结构
~~~
/plugins/test/
├─admin 插件后台目录
│ ├─Index.php 控制器文件
├─home 插件前台目录
│ ├─Index.php 控制器文件
├─model 插件模型目录
├─sql 模块SQL文件目录
│ ├─install.sql 安装SQL文件
│ ├─uninstall.sql 卸载SQL文件
├─static 插件静态资源目录
├─validate 验证器目录
├─view 插件模板目录
│ ├─admin 插件后台模板目录
│ │ ├─index 控制器模板目录(以控制器命名)
│ │ │ ├─show.php 模板文件(以操作方法命名)
│ ├─home 插件前台模板目录(以控制器命名)
│ │ ├─index 控制器模板目录(以控制器命名)
│ │ │ ├─detail.php 模板文件(以操作方法命名)
│ ├─widget 插件钩子模板目录
│ │ │ ├─system_hook.php 钩子模板(示例)
├─info.php 插件基本信息
├─menu.php 插件后台管理菜单节点
├─test.php 插件与钩子的实现方法
├─test.png 插件图标
~~~
## 后台控制器(/plugins/test/admin/)
创建Index控制器``/plugins/test/admin/Index.php``,所有插件后台控制器必须继承`` app\common\controller\Common`` 控制器,控制器里面的数据库增删改查、验证等均跟ThinkPHP5完全一样。示例代码如下:
~~~php
<?php
// 命名空间
namespace plugins\test\admin;
// 引入Common控制器
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
## 前台控制器(/plugins/test/home/)
创建Index控制器``/plugins/test/home/Index.php``,所有插件前台控制器必须继承`` app\common\controller\Common`` 控制器,控制器里面的数据库增删改查、验证等均跟ThinkPHP5完全一样。示例代码如下:
~~~php
<?php
// 命名空间
namespace plugins\test\home;
// 引入Common控制器
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/test/index/detail
>格式2:/plugins.php?_p=test&_c=index&_a=detail