控制器
控制器基类
本框架基于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 &$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();
}
}
最后更新时间:2023-08-07 16:14:4310002 https://doc.swiftadmin.net/help/7.html