##其他控制器
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.hmoore.net/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