控制器

控制器基类

本框架基于Webman架构继承父类的方式,在BaseController之下分别定义了三个基类控制器

每个基类控制器构造函数里面会执行一些初始化的鉴权操作,以及渲染页面默认变量的操作

app/ApiController.php //API接口基类控制器
app/AdminController.php //后台基类控制器
app/HomeController.php //前台基类控制器

如需增加模块/应用,例如需要增加book应用,需要book控制器的话,请继承BaseController控制器!!!

菜单制作

请在后台基础设置->菜单管理的地方增加所需要的菜单,并且菜单路由必须要以/符号开头,并且请注意区分大小写 QQ截图20220713003148.png

请注意,我们的控制器必须要大小学区分,比如后台的用户组控制器,则必须使用/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 跳转,
// 都是无效的!也不要在这里初始化获取数据
        $this->auth = Auth::instance();
    }
}

变量

/**
 * 数据库实例
 * @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;

use app\common\library\Auth;

// 前台全局控制器基类
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();
        $this->auth = Auth::instance();
    }
}
最后更新时间:2022-08-21 18:24:041999
https://doc.swiftadmin.net/help/7.html