插件的控制放在插件目录下的`controller`文件夹下,控制器命名规范请参考ThinkPHP5.0文档。 如果插件有后台管理功能,除了可以在插件入口文件定义管理界面的字段信息,然后由系统生成管理界面外,也可以自己创建页面。 但必须写在`Admin`控制器的`index`方法内。 ~~~ plugins [所有插件目录] ├─HelloWorld [插件目录,插件名为首字母大写的驼峰式] │ ├─controller [插件控制器目录] │ │ Admin.php [插件控制器,自定义后台管理都在这里,可以建立其他控制器] ~~~ 在`Admin.php`的代码如下: ~~~ namespace plugins\HelloWorld\controller; use app\common\builder\ZBuilder; use app\common\controller\Common; /** * 插件后台管理控制器 * @package plugins\HelloWorld\controller */ class Admin extends Common { /** * 插件管理页 * @return mixed */ public function index() { // 用TableBuilder渲染模板 return ZBuilder::make('table') ->setPageTitle('数据列表') ->setSearch(['id' => 'ID', 'said' => '名言', 'name' => '出处']) ->addColumns([ ['id', 'ID'], ['said', '名言', 'text.edit'], ['name', '出处'], ['status', '状态', 'switch'], ['right_button', '操作', 'btn'] ]) ->setTableName('plugin_hello') ->fetch(); } } ~~~ 只要在`Admin`控制器内有`index`方法,那么点击插件管理按钮,系统会优先执行该方法,而不会自动创建管理页面。 在自定义的管理界面添加按钮,按钮的链接可以使用`plugin_url`方法来调用插件控制器内的方法,比如: ~~~ $btnOne = [ 'title' => '自定义按钮1', 'icon' => 'fa fa-list', 'href' => plugin_url('HelloWorld/Admin/testTable'), 'target' => '_blank', ]; ~~~ 表示调用`HelloWorld`插件的`Admin`控制器的`testTable`方法。 ### 自定义模板 自定义模板有两种方法,一种是使用ThinkPHP的fetch()方法,一种是只用系统的pluginView方法。 使用$this->fetch()需要指定模板文件的完整路径,如: ~~~ return $this->fetch(config('plugin_path'). 'HelloWorld/view/index.html'); ~~~ 或者使用pluginView方法,默认加载插件view目录下与当前方法名一致的模板文件。 ~~~ return $this->pluginView(); ~~~ 也可以指定模板名称 ~~~ return $this->pluginView('index'); // 加载插件view目录下的index.html模板文件 ~~~ 也可以指定模板后缀 ~~~ return $this->pluginView('index', 'tpl'); ~~~