💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
插件的控制器放在插件目录下的`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(); } } ```