插件控制器也可分為后臺控制器(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