[TOC]
## 继承关系
![](https://img.kancloud.cn/72/61/7261684aa896193a9f810ccc87611dbd_1463x444.png)
上图是后台控制器的继承关系图:
1、woo\common\controller\Controller:整个系统的核心控制器,里面的属性和方法任何一个应用都可以调用到
2、woo\common\controller\AdminController:继承于1,整个系统的后台核心控制器,里面的属性和方法是每个后台控制器都可以调用到
3、app\common\controller\Admin:继承于2,作用和2一致;默认是空的,用于开发者定义自己的后台核心属性和方法
4、woo\admin\controller\XXXXXX:后台具体的业务控制器,它们继承于3;这些控制器都是系统自带的控制器,为了方便系统核心功能的升级,所以把系统自带的控制器单独抽离处理了;你可以理解为它们就是你正常开发的时候定义在app\admin\controller中的控制器,只是当app\admin\controller中控制器不存在的时候就会自动调用到woo\admin\controller中。
5、如果你希望扩展4中系统自带的具体控制器(比如你要改下Setting系统设置中的某个方法),你需要在app\admin\controller中定义一个类名一致的控制器,然后继承到4中的对应控制器
6、如果是你自定义的控制器,直接定义在app\admin\controller中然后继承于3
![](https://img.kancloud.cn/f9/f5/f9f520e9c3873cf716564657a6af839e_688x424.png)
建议通过后台系统自带的控制器创建工具来创建我们的控制器,它会自动的识别来满足上面的继承规则。
> 需要你需要自定义的应用,建议在app\common\controller中定义一个整个应用的核心控制器,它应该继承于1。
## 公共属性
### 全局公共属性
~~~
$request:当前请求实例 \woo\common\Request
$app:当前应用实例 \think\App
$assign:系统\woo\common\View实例,用于指定模板、模板赋值、添加CSS和JS文件等
$params:当前请求的参数,里面包含了当前请求的控制器名、应用名、方法名、url上的get参数等
$args:获取当前url上面的get参数
$middleware:控制器中间件
$mdl:当前控制器对应的同名模型实例(如果没有就为空)
$mdlPk:当前控制器对应的同名模型的主键字段名
$local:一般用于控制器之间传递全局数据
$login:当前登录用户的相关信息(如果有登录)
~~~
它们是定义在woo\common\controller\Controller中的,所有应用都可以访问的属性。
### 后台公共属性
~~~
$formPage:表单构建器实例,默认空
$table:表格构建器实例,默认空
$autoCreateFormActions:需要自动实例表单构建器的方法,默认是['create', 'modify']
$actionList:存储页面顶部按钮信息,一般不用直接操作该属性
~~~
它们是定义在woo\common\controller\AdminController中的,后台应用都可以访问的属性。
## 公共方法
### 全局公共方法
#### 初始化方法 `initialize`
~~~
protected function initialize()
{
// 你的代码可能在这里
parent::initialize(); //一定要调用父类方法
// 你的代码可能在这里
}
~~~
里面可以定义一些,每次请求都希望执行的代码。一定要调用父类方法,系统很多核心代码也是在初始化中定义的。
该方法中不要重定向和return,确实需要拦截请求应该用中间件。
注意访问控制器尽量是`protected `,你自定义的方法如果不希望通过url直接请求到也应该是`protected`或`private`;只有能通过url请求的方法才`public`。
#### 信息提示 `message`
~~~
/**
* 消息提示
* @param string $msg 消息
* @param string $type 类型 success error info warm
* @param array $redirects 跳转连接
* @param int $auto 自动跳转 秒数
* @return string|\think\response\Json|\think\response\Redirect|void
* @throws \Exception
*/
protected function message(string $msg = '',string $type = 'success', array $redirects = [],int $auto = 3)
~~~
~~~
// 默认是sucess风格的提示
return $this->message('这里是提示消息内容');
// 其他风格的提示
//return $this->message('这里是提示消息内容', 'error');// 错误
//return $this->message('这里是提示消息内容', 'warm');// 警告
//return $this->message('这里是提示消息内容', 'info');// 普通
// 自动跳转时间 默认3秒
//return $this->message('这里是提示消息内容', 'info', [], 5);
// 自定义跳转按钮和链接
//return $this->message('这里是提示消息内容', 'info', [
// '返回首页' => (string) url('Index/index'),
// '测试' => (string) url('Index/index'),
// '测试2' => ['url' => (string) url('Index/index'), 'class'=>'btn-3']// 通过类名自定义按钮样式
//]);
// 默认一定会加上返回上一页的按钮
//return $this->message('这里是提示消息内容', 'info', ['back' => false], 5);// 取消返回上页按钮
//return $this->message('这里是提示消息内容', 'info', ['back' => false, '返回首页' => (string) url('Index/index')]);// 取消返回 同时自定义
//return $this->message('这里是提示消息内容', 'info', ['back' => ['title' => '返回', 'url' => (string) url('Index/index')]]);// 修改返回 标题和地址
//return $this->message('这里是提示消息内容', 'info', ['close' => true]);// 后台tab中 可以带一个关闭tab窗口的按钮
~~~
如果是ajax请求会自动调用下面的ajax方法返回一个json
#### 重定向 `redirect`
~~~
protected function redirect($url)
~~~
#### 异步响应 `ajax`()
~~~
/**
* json返回数据
* @param string $result
* @param string $message
* @param array $data
* @return \think\response\Json
*/
protected function ajax($result = 'success', string $message = '', $data = [])
{
settype($data, 'array');
return json([
'result' => $result,
'message' => $message,
'data' => $data
]);
}
~~~
你也可以直接用TP的json助手函数
#### jsonp响应 `jsonp`
~~~
/**
* jsonp返回数据
* @param string $result
* @param string $message
* @param array $data
* @return \think\response\Json
*/
protected function jsonp(string $result = 'error', string $message = '', $data = [])
{
settype($data, 'array');
return jsonp([
'result' => $result,
'message' => $message,
'data' => $data
]);
}
~~~
你也可以直接用TP的jsonp助手函数
#### 追加一个网页标题`addTitle`
~~~
protected function addTitle($title)
~~~
#### 追加一个网站关键词 `addKeywords`
~~~
protected function addKeywords($title)
~~~
#### 追加一个网站描述 `addDescription`
~~~
protected function addDescription($title)
~~~
#### 重置网页标题 `setTitle`
~~~
protected function setTitle($title, $type = 'title')
~~~
#### 重置网站关键词 `setKeywords`
~~~
protected function setKeywords($title)
~~~
#### 重置网站描述 `setDescription`
~~~
protected function setDescription($title)
~~~
#### 模板定位 `fetch`
~~~
protected function fetch(string $tempate = '', array $vars = [])
~~~
#### 模板变量赋值 `assign`
~~~
protected function assign($name, $value = null)
~~~
### 后台公共方法
后台每张表的CURD,应该创建一个和模型名一样的控制器名
#### 列表 `index`
~~~
public function index()
~~~
后面章节,重点介绍
#### 添加 `create`
~~~
public function create()
~~~
后面章节,重点介绍
#### 修改 `modify`
~~~
public function modify()
~~~
后面章节,重点介绍
#### 删除 `delete`
~~~
public function delete()
~~~
后面章节,重点介绍
#### 批量删除 `batchDelete`
~~~
public function batchDelete()
~~~
后面章节,重点介绍
#### 排序 `sort`
~~~
public function sort()
~~~
要使用系统自带的排序方案,你的数据表里面必须有`list_order`这个排序字段。
#### 详情 `detail`
~~~
public function detail()
~~~
后面章节,重点介绍
#### 列表开关 `ajaxSwith`
~~~
public function ajaxSwitch()
~~~
列表项模板设置为`checker`,自动完成该功能。
get请求接收三个参数:
`field`:被修改的字段名
`id`:被修改数据的主键id值
`value`:被修改字段的值
可以通过`$this->local['where'][] = ['字段', '符号', '值'];`传递额外条件
#### 列表批量开关 `batchSwitch`
~~~
public function batchSwitch()
~~~
url参数(?field=xxx&value=xxx)上接收2个参数:
`field`:被修改的字段名
`value`:被修改字段的值
post请求接收`selected_id`参数(数组):被修改数据的id集合
可以通过`$this->local['where'][] = ['字段', '符号', '值'];`传递额外条件
按钮举例:
~~~
[
'name' => 's1',
'title' => '审核通过',
'sort' => 1,
'js_func' => 'woo_batch_switch',
'url' => (string)url('batchSwitch', ['field' => 'is_verify', 'value' => 1])
]
~~~
可以参考cms.Document模型
#### 回收站 `deleteIndex`
~~~
public function deleteIndex()
~~~
#### 恢复 `restore`
~~~
public function restore()
~~~
#### 批量恢复 `batchRestore`
~~~
public function batchRestore()
~~~
#### 真删除 `forceDelete`
~~~
public function forceDelete()
~~~
#### 批量真删除 `batchForeceDelete`
~~~
public function forceBatchDelete()
~~~
#### 添加一个顶部按钮 `addAction`
~~~
/**
* 添加头部操作按钮
* * @param string $name 按钮标识
* @param string $title 标题
* @param string $url url
* @param string $class 类名
* @param string $icon 图标
* @param int $sort 排序 任意数字 越大越前面
* @param bool|string $js_func 如果点击以后需要js执行业务 需要给一个 你自己js函数的名字
* @return $this
*/
protected function addAction(
string $name,
string $title = '',
string $url = '' ,
string $class = '',
string $icon = '',
int $sort = 0,
$js_func = false
)
~~~
参考后文中[自定义页面](https://www.kancloud.cn/laowu199/e_dev/2052120)
- 2.0开发手册
- 基础
- 简介
- 安装
- 目录
- 规范(必看)
- 快速开发
- 创建模型
- 字段管理
- 无限级开发
- 模型Model
- 定义
- 方法
- 事件
- 关联
- 关联查询
- 验证
- 后台控制器Controller
- 定义
- 列表【index】
- 新增【create】
- 修改【modify】
- 删除【delete】
- 详细【detail】
- 文本审核【antispam】
- 清空数据【clearData】
- 自定义页面
- 视图View
- 视图使用
- 引入CSS和JS
- 基础表单构建Form
- 布局表单构建FormPage
- 表单构建器的基础使用
- 表单项
- 表单分组
- 表单触发器
- 表单布局
- 数据提交验证和入库
- 集成tinymce编辑器
- 集成nkeditor编辑器
- 表格构建Table
- 表格构建器基础使用
- 表格构建器列表字段相关
- 自定义列表头部工具按钮
- 自定义列表项工具按钮
- 自定义搜索
- 定义列表侧边栏
- 静态数据
- 更多属性和回调
- 自定义模板V2.1.0
- 列表统计输出V2.1.2
- 常见问题
- 自定义应用
- 创建新应用
- 应用开发
- API应用
- 自定义插件
- 创建新插件
- 杂项
- 认证Auth
- 权限管理
- 上传Upload
- 批量导入
- 助手库
- 系统配置
- 字典
- 二维码生成
- 源码修改
- 常见问题
- 小技巧,小细节
- 插件
- oauth
- APP一键登录
- 微信小程序登录
- 2.0CMS建站
- 基础
- 安装
- 建站
- Callback
- 引入CSS和JS
- 模板
- 栏目数据
- 列表页数据
- 详细页数据
- 栏目封面
- 自定义表单
- 其他数据和自定义数据
- wap视图层
- 前台搜索
- API开发
- CMS应用日志
- CMS升级指导
- 中台-SAAS开发
- 安装
- 中台日志
- 中台升级指导
- ★★2.0视频教程★★
- 附录
- Admin核心更新日志
- Admin核心升级指导
- composer
- 安全