##其他控制器
app\admin\controller\*
完美支持多级控制器,也完美支持多级控制器权限分配与校验,完美支持多级控制器的代码生成
##继承
如果需要在控制器中是用权限校验,一定要继承公共控制器 `(app\admin\Controller)`,如果不需要权限校验,不用继承公共控制器,比如 `Generate` (代码自动生成控制器)、`Pub` (公开不授权控制器),如果需要继承公共控制器使用其方法但不想权限校验,请到extra目录下修改 `rbac.php` 里的配置信息
>[info] 继承公共控制器后仍然没有 add、edit、index等方法,需要引入 traits ,详情请看 [traits 多继承 Controller](225023)
##属性
和公共控制器一样,用来定义是否开启假删除和屏蔽不需要的方法
```
// 黑名单方法,禁止访问某些方法
protected static $blacklist = [];
// 是否删除标志,0-正常|1-删除|false-不包含该字段
protected static $isdelete = 0;
```
>[danger] 如果在控制器里不需要用到假删除,并且数据表中没有isdelete字段,一定要在控制器中将isdelete设为false,否则会导致报错
> 如果不需要使用相关方法,可以使用 protected static $blacklist = ['delete', 'deleteForever']; 对某些方法屏蔽
##方法
###前置方法 before 支持
本框架前置方法 before 支持写在公共控制器中,没有修改官方源码,使用方法请参考 [前置方法before支持](225018)
###过滤器 filter
用于 `index`、`recyclebin` 方法里过滤数据,**参数一定要使用取地址符&**,可以在此定义模糊查询,比如:
~~~
protected function filter(&$map)
{
if ($this->request->param('title')) {
$map['title'] = ["like", "%" . $this->request->param('title') . "%"];
}
if ($this->request->param('name')) {
$map['name'] = ["like", "%" . $this->request->param('name') . "%"];
}
}
~~~
完美支持在过滤里定义关联查询,使用到关联查询时不需要重写index或其他相关方法,提高开发效率,使用关联查询时要定义
`$map['_relation'] = "关联的表名,不含表名前缀"`,请参考 [ThinkPHP5 - 关联预载入](http://www.kancloud.cn/manual/thinkphp5/139045) ,`$map['_relation']` 的值与 `with` 方法的值一样
`$map['_table'] = “当前表名,不含前缀"`
如果使用关联查询条件,要定义成 `$map['relation_table.field'] = '值'`,例如:
~~~
protected function filter(&$map)
{
if ($this->request->param('login_location')) {
$map['login_location'] = ["like", "%" . $this->request->param('login_location') . "%"];
}
// 关联筛选
if ($this->request->param('title')) {
$map['title'] = ["like", "%" . $this->request->param('title') . "%"];
}
if ($this->request->param('name')) {
$map['name'] = ["like", "%" . $this->request->param('name') . "%"];
}
// 设置属性
$map['_table'] = "login_log";
$map['_relation'] = "user";
$map['_order_by'] = "login_log.id desc";
}
~~~
###ID 过滤器 filterId
ID 过滤器用于过滤某些禁止操作的数据,通常和前置方法配合使用,例如:
```
/**
* 禁用限制
*/
protected function beforeForbid()
{
// 禁止禁用 Admin 模块,权限设置节点
$this->filterId(1, '该用户不能被禁用', '=');
}
```
其中 `filterId()` 方法的第三个参数 $method 可以设置成比较符号,也可以设置成回调函数,例如:
```
/**
* 禁用限制
*/
protected function beforeForbid()
{
// 禁止禁用 Admin 模块,权限设置节点
$this->filterId([1, 2, 3, 4, 5, 6], '该记录不能被禁用');
}
```
- 概要
- 开始使用
- 写在前面
- 目录结构
- 模板主题支持
- 前置方法before支持
- 数据返回
- 异常接管
- Rbac 权限管理
- 开始使用
- 用户管理
- 分组管理
- 节点管理
- 角色管理
- 使用流程
- 其他
- 代码自动生成 v1.2
- 示例一 - 一级控制器
- 示例二 - 多级控制器
- 示例三 - 从数据表生成
- 示例四 - 指定生成的文件
- 示例五 - 命令行模式
- 示例六 - 模拟命令行模式
- 代码自动生成
- 示例一 - 一级控制器
- 示例二 - 多级控制器
- 控制器
- 公共控制器
- traits 多继承 Controller
- 公开不授权控制器
- 其他控制器
- 标签扩展
- 模板
- 网站操作日志
- 节点图
- 行为驱动
- 其他后端方法
- Excel一键导出
- Excel一键导入
- 文件下载
- 邮件发送
- 七牛文件上传
- id加密
- 前端
- ajax请求
- 表单校验
- 丰富弹层
- 异步操作
- 表格溢出
- 随机字符串
- 自动面包屑导航
- 动态加载文件
- 文件上传
- Tab 切换
- 图片预览
- 二维码生成
- 日历组件
- 升级指导
- 更新日志
- FAQ