控制器
为了方便项目的开发管理,我们将一些常用的、非业务逻辑代码抽离并整合到了一个公共的控制器基类(/app/common/controller/Admin.php),所有后台控制器都必须继承此基类控制器。
在此基类控制器中我们定义了一些必要的基础属性和通用方法,具体请往下看:
基础属性
/*** 模型名(模型名、表名二选一)* 应用模型名为string的格式:model+模型名* 插件模型名为stirng的格式:pluginModel+模型名* @var string|model*/protected $model = null;/*** 表名(模型名、表名二选一,表名不含表前缀)* @var string*/protected $table = null;/*** 验证器类* 应用验证器名为string的格式:validate+模型名* 插件验证器名为stirng的格式:pluginValidate+模型名* @var string|validate*/protected $validate = null;/*** 验证码添加场景名称(通用添加方法专用)* @var string*/protected $addScene = '';/*** 验证器修改场景名称(通用修改方法专用)* @var string*/protected $editScene = '';/*** 允许通过setField方法更新的字段* @var array*/protected $setFields = [];/*** 限制通用修改方法可编辑的字段* @var array*/protected $editFields = [];/*** 通用上传配置表(默认使用系统附件表)* @var array*/protected $uploadConfigTable = [];/*** 表单数据(表单自动赋值)* @var array*/protected $formData = [];/*** 无需鉴权的方法,但要登录* @var array*/protected $noNeedAuth = [];/*** 无需登录的方法* @var array*/protected $noNeedLogin = [];/*** 数据权限设置,可选值:own 个人,org 组织,false 不启用* @var string|bool*/protected $dataRight = false;/*** 数据权限字段名* @var string*/protected $dataRightField = 'admin_id';/*** 是否开启布局模板|布局模板文件路径* @var bool|string*/protected $layout = false;/*** 模板渲染数据* @var array*/protected $assignData = [];/*** 模板基础路径* @var string*/protected $viewPath = '';/*** 权限Auth* @var Auth*/protected $auth = null;
通用方法
由于后台采用了白名单权限控制,如有使用到某些 public 方法,请将此方法的url手动添加到权限菜单。
/*** 新增数据** @return mixed*/public function add(){}/*** 编辑数据** @param integer $id 主键值* @return mixed*/public function edit(){}/*** 删除数据(支持软删除自动识别)** @param integer|array $id 主键值* @return mixed*/public function delete(){}/*** 恢复软删除** @param integer|array $id 主键值* @return mixed*/public function restore(){}/*** 设置状态** @param string $field 状态字段,默认status* @param integer $value 状态值,0或1* @param integer|array $id 主键值* @return mixed*/public function setStatus(){}/*** 快速更新某个字段** @param string $field 字段名,默认sort* @param integer $value 字段值* @param integer|array $id 主键值* @return mixed*/public function setField(){}/*** 切换默认设置** @param string $field 默认字段名,默认is_default* @param integer $value 字段值* @param integer $id 主键值* @return mixed*/public function setDefault(){}/*** 上传附件** @param string $action 上传方法,save保存入库;store只上传不入库* @param string $from 来源(input默认,kindeditor,umeditor,markdown,ckeditor,ueditor)* @param string $group 本地分组名* @param string $thumb 缩略图尺寸(默认调用系统配置-上传配置-缩略图尺寸)* @param string $thumb_type 缩略图裁剪类型(默认调用系统配置-上传配置-缩略图裁剪)* @param integer $full_path 是否返回全路径(0否,1是)* @param string $disk 磁盘(请根据/config/filesystem.php里面的disks来配置)* @param string $driver 上传驱动(默认调用系统配置-上传配置-上传驱动)* @param string $watermark 默认水印设置(默认调用系统配置-上传配置-默认水印)* @param string $watermark_font 文字水印字体(默认调用系统配置-上传配置-文字水印字体)* @param string $watermark_text 文字水印内容(默认调用系统配置-上传配置-文字水印内容)* @param string $watermark_size 文字水印大小(默认调用系统配置-上传配置-文字水印大小)* @param string $watermark_color 文字水印颜色(默认调用系统配置-上传配置-文字水印颜色)* @param string $watermark_picture 水印图片地址(默认调用系统配置-上传配置-水印图片)* @param string $image_watermark_locate 水印图片位置(默认调用系统配置-上传配置-图片水印位置)* @param string $image_watermark_opacity 水印图片透明度(默认调用系统配置-上传配置-图片水印透明度)* @return json*/public function upload(){}/*** 获取某个key的数据授权ID集合** @param string $key 格式:应用.分组名* @return array*/protected function getDataAuth(string $key){}/*** 检查某个key的数据ID是否有授权** @param int $id 数据ID* @param string $key 格式:应用.分组* @return bool*/protected function checkDataAuth(int $id, string $key) : bool{}/*** 获取同组织下的所有管理员ID** @return array*/protected function getAdminIds(){}/*** 获取管理员的数据权限 where** @param array $where 全部筛选条件(原样返回)* @return array*/protected function getRightWhere($where = []){}/*** 获取数据库对象** @return object*/protected function getDb(){}/*** 获取模型对象** @return object*/protected function model(){}/*** 获取数据库表对象** @return object*/protected function table(){}/*** 验证数据* @access protected* @param array $data 数据* @param string|array $validate 验证器名或者验证规则数组* @param array $message 提示信息* @param bool $batch 是否批量验证* @return array|string|true* @throws ValidateException*/protected function validate(array $data, $validate, array $message = [], bool $batch = false){}/*** 输出响应** @param mixed $msg 提示信息* @param mixed $data 要返回的数据* @param integer $code 错误码/状态码* @param string $type 输出类型,可选值:json、xml、jsonp* @return json*/protected function response($msg, $data, int $code = 0, string $type = null, array $header = []){}/*** 输出layui的json数据** @param array $data* @param integer $count* @return json*/protected function layuiJson($data, $count = 0){}/*** 以JSONP格式输出错误信息** @param string $msg* @param array $data* @param string $url* @return jsonp*/protected function errorJsonp($msg = 'error', $data = [], $url = ''){}/*** 以JSONP格式输出成功信息** @param string $msg* @param array $data* @param string $url* @return jsonp*/protected function successJsonp($msg = 'success', $data = [], $url = ''){}/*** 模板变量赋值* @access public* @param mixed $name 变量名* @param mixed $value 变量值* @return $this*/protected function assign($name, $value = ''){}/*** 解析和获取模板内容 用于输出* @access public* @param string $template 模板文件名或者内容* @param array $vars 模板变量* @return string* @throws \Exception*/protected function fetch(string $template = '', array $vars = []): string{}
控制器示例:
<?php
namespace app\demo\admin;
use app\common\controller\Admin;
/**
* 文章控制器
* @package app\demo\admin
*/
class Artilce extends Admin
{
protected $model = 'modelArticle';// [选填]模型(模型、表名二选一)
protected $table = '';// [选填]表名(模型、表名二选一)
protected $validate = '';// [选填]验证器名
protected $addScene = '';// [选填]添加场景名称
protected $editScene = '';// [选填]修改场景名称
protected $setFields = [];// [选填]允许通过setField方法更新的字段
protected $editFields = '*';// [选填]在编辑模式下允许编辑的字段(*表示所有)
protected $uploadConfigTable = [];// [选填]通用上传配置表
protected $noNeedAuth = [];// [选填]无需鉴权的方法
protected $readonlyFields = [];// [选填]只读字段定义(表单构建器专用)
protected $dataRight = false;// [选填]数据权限设置,可选值:own 个人,org 组织,false 不启用
protected $dataRightField = 'admin_id';// [选填]数据权限字段名
public function index()
{
return $this->fetch();
}
}
公共模板变量
| 模板变量名称 | 生成的内容 | 备注数据 |
|---|---|---|
| STATIC | /static/[app] | 静态资源路径前缀 |
| UPLOAD | /upload | 附件路径 |
| PUBLIC_CSS | /static/css | 公共CSS文件目录 |
| PUBLIC_JS | /static/js | 公共JS文件目录 |
| PUBLIC_IMG | /static/image | 公共image文件目录 |
| CSS | /static/[app]/admin/css | 当前应用的CSS文件目录 |
| JS | /static/[app]/admin/js | 当前应用的js文件目录 |
| IMG | /static/[app]/admin/image | 当前应用的image文件目录 |
[app] 为当前应用或插件名
