插件的控制器放在插件目录下的`controller`文件夹下,控制器命名规范请参考ThinkPHP6.0文档。
我们可以在插件目录下的`controller`里新建后台/前台功能文件,并且通过`backend_plugins_url() `、 `plugins_url()` 函数来生成Url进行访问。
## 后台管理页面
如果插件有后台管理功能,除了可以在插件信息的配置项定义管理配置的字段信息,也可以自己创建页面。
以 `wc_test` 插件控制器的 `Admin.php` 为例,我们新建一个后台管理页面
```
<?php
// +----------------------------------------------------------------------
// | WeCenter 简称 WC
// +----------------------------------------------------------------------
// | Copyright (c) 2020-2021 https://www.wecenter.com
// +----------------------------------------------------------------------
// | WeCenter团队一款基于TP6开发的社交化知识付费问答系统、企业内部知识库系统,打造私有社交化问答、内部知识存储
// +----------------------------------------------------------------------
// | Author: WeCenter团队 <devteam@wecenter.com>
// +----------------------------------------------------------------------
namespace plugins\wc_test\controller;
use app\common\controller\Backend;//继承后台控制器
/**
* 短信记录
* Class Index
* @package plugins\wc_test\controller
*/
class Index extends Backend
{
protected $table = 'test_log';
public function index()
{
$columns = [
['id' , '编号'],
['mobile', '手机号'],
['send_type','短信运营商'],
['template_code','模板ID'],
['content','短信内容'],
['ip','IP地址'],
['create_time', '发送时间','datetime'],
];
$search = [
['select', 'send_type', '短信运营商', '','=',[
'阿里云短信',
'腾讯云短信'
]],
];
if ($this->request->param('_list'))
{
// 排序规则
$orderByColumn = $this->request->param('orderByColumn') ?? 'id';
$isAsc = $this->request->param('isAsc') ?? 'desc';
$where = $this->makeBuilder->getWhere('id',$search);
// 排序处理
return db('sms_log')
->where($where)
->order([$orderByColumn => $isAsc])
->paginate([
'query' => Request::get(),
'list_rows' =>get_setting("contents_per_page",15),
])
->toArray();
}
return $this->tableBuilder
->setUniqueId('id')
->addColumns($columns)
->setSearch($search)
->addColumn('right_button', '操作', 'btn')
->addRightButtons(['delete'])
->addTopButtons(['delete'])
->fetch();
}
}
```
我们可以在`info.php`里,通过`menu`设置,生成菜单入口
```
'menu'=>[
'is_nav' => 0,//1导航栏;0 非导航栏
'menu' =>[
'name' => 'plugins/wc_test/Admin/index',
'title' => '短信记录',
'status' => 1,
'icon' => 'fas fa-comments-dollar',
'menu_list' => [
['name' => 'plugins/wc_test/Admin/delete', 'title' => '操作-删除', 'status' => 0],
]
]
]
```
也可以通过`backend_plugins_url() `生成访问url
```
backend_plugins_url('wc_test://Admin/index',[])
```
*****
## 前台页面
如果插件有前台页面功能,也可以通过一样的方法来定义。
我们在 `wc_test` 插件目录下的`controller`里,新建一个Index.php,作为前台入口,可以通过 `plugins_url()` 函数生成访问的url。
```
plugins_url('wc_test://Index/detail',['id'=>123])
```
``` php
<?php
namespace plugins\wc_test\controller;
use app\common\controller\Frontend;//继承前台控制器
use think\App;
class Index extends Frontend
{
public function index()
{
$list = db('test_log')->where('status',1)->order(['sort'=>'DESC'])->select();
$this->assign(
[
'list' => $list
]
);
$seo_title = '首页';
$seo_keywords = '';
$seo_description = '';
$this->TDK($seo_title, $seo_keywords, $seo_description);
//默认调用view/index/index.php,所以我们需要在view里,新建index/index.php
return $this->fetch();
}
public function detail()
{
$id = $this->request->param('id',0,'intval');
//默认调用view/index/detail.php,所以我们需要在view里,新建index/detail.php
return $this->fetch();
}
}
```