## 控制器基类 本框架基于Webman架构继承父类的方式,在 `BaseController` 之下分别定义了三个基类控制器 每个基类控制器构造函数里面会执行一些初始化的鉴权操作,以及渲染页面默认变量的操作 ``` app/ApiController.php //API接口基类控制器 app/AdminController.php //后台基类控制器 app/HomeController.php //前台基类控制器 ``` 如需增加模块/应用,例如需要增加book应用,需要book控制器的话,请继承 `BaseController` 控制器!!! ## 菜单制作 请在后台基础设置->菜单管理的地方增加所需要的菜单,并且菜单路由必须要以/符号开头,并且请注意区分大小写 !  请注意,我们的控制器必须要大小学区分,比如后台的用户组控制器,则必须使用/system/AdminGroup/index的方式去访问 否则在Linux下可能会导致找不到控制器!!! ## Admin基类结构 我们一般在制作后台开发的时候,必须要继承AdminController 这个类,其中基类中存在index/add/edit/del/status/默认的CURD方法, 后台必须要存在的鉴权操作也是走这个流程。所以请务必继承开发! ``` namespace app; use Exception; use PDOException; use think\facade\Db; use think\facade\Session; use app\admin\library\Auth; use Throwable; use function implode; use function is_numeric; // 后台全局控制器基类 class AdminController extends BaseController { /** * 构造函数 */ public function __construct() { parent::__construct(); // 请勿在构造函数return 跳转, // 都是无效的!也不要在这里初始化获取数据 } } ``` ### 变量 ``` /** * 数据库实例 * @var object */ public $model = null; /** * 是否验证 * @var bool */ public $isValidate = true; /** * 验证场景 * @var string */ public $scene = ''; /** * 数据表名称 * @var string */ public $tableName = null; /** * 控制器/类名 * @var string */ public $controller = null; /** * 控制器方法 * @var string */ public $action = null; /** * 控制器/方法名 * @var string */ public $method = null; /** * 操作状态 * @var int */ public $status = false; /** * 管理员信息 * @var array */ public $admin = []; /** * 管理员会话标识 * @var string */ public $sename = 'AdminLogin'; /** * 获取模板 * @access protected * @var string */ public $template = null; /** * 共享模板 * @var string */ public $tplsharing = 'add'; /** * 权限验证类 * @var object */ public $auth = null; /** * 当前表字段 * * @var array */ protected $tableFields = []; /** * 默认开关 * * @var string */ protected $keepField = 'status'; /** * 开启数据限制 * 默认关闭 * @var boolean */ protected $dataLimit = false; /** * 数据限制字段 * * @var string */ protected $dataLimitField = 'admin_id'; /** * 需要排除的字段 * * @var string */ protected $ruleOutFields = ""; /** * 查询过滤字段 * * @var array */ protected $filterWhere = ['page', 'limit']; /** * 查询转换字段 * * @var array */ protected $converTime = ['createtime', 'updatetime', 'delete_time']; /** * 不需要鉴权的方法 * @var array */ protected $noNeedLogin = [ '/index/index', // 后台首页 ]; /** * 跳转URL地址 * @var string */ protected $JumpUrl = '/'; ``` ### 控制器方法 以下几个方法熟悉后可以提高开发效率 ``` /** * 排除特定字段 * * @param [type] $params * @return void */ protected function preruleOutFields($params) { if (is_array($this->ruleOutFields)) { foreach ($this->ruleOutFields as $field) { if (key_exists($field, $params)) { unset($params[$field]); } } } else { if (key_exists($this->ruleOutFields, $params)) { unset($params[$this->ruleOutFields]); } } return $params; } /** * 获取查询参数 * * @param array $searchFields * @return array|false */ protected function buildSelectParams(array $searchFields = []) {} /** * 数据表排序 * @return mixed|void */ public function sort() {} /** * 数据预处理 * @access public * @param array $where 查询条件 * @return array */ public function buildBeforeWhere(array $where = []): array {} /** * 递归查询父节点 * @access public * @param int $pid 查询条件 * @param array $array 返回数组 * @return array */ public function parentNode(int $pid, array &amp;$array = []): array { return $array; } ``` ## Index基类结构 由于编程父类继承特性大致都一样,在这里不做过多的赘述,你只需要明白变量的某些类型 以及如何更好的调用他们即可!! ``` namespace app; // 前台全局控制器基类 class HomeController extends BaseController { public function __construct() { $this->referer = \request()->header('referer'); $siteArr = saenv('site', true); if ($siteArr && is_array($siteArr)) { foreach ($siteArr as $key => $value) { \support\View::assign($key,$value); } } } ``` ## API基类结构 ``` /** * Api全局控制器基类 * Class ApiController * @package app * @author meystack < */ class ApiController extends BaseController { /** * 初始化方法 */ public function __construct() { parent::__construct(); } } ``` 更新于 2026-08-09 14:47 阅读 6 ← 数据库 静态前端 → 相关问题 前言 安装 架构 多语言 数据库 静态前端 权限管理 全局组件