基础控制器

1. 基础控制器 class grace{...} 说明

所有的自定义控制器必须继承 grace 基础控制器,基础控制器内置了一些常用的方法以便您的开发!您也可以扩展 grace 来实现更为便捷的开发。

2. 源码解析

// 基础控制器定义
class grace{
    // url 解析后获得的数据
    public    $gets;
    // 核心数据表名
    public    $tableName  = null;
    // 数据表主键
    public    $tableKey   = null;
    // 数据表操作对象
    public    $db;
    // 数据排序规则
    public    $order      = null;
    // 是否过滤 $_POST 数据内的 < > , 可防止跨站攻击
    public    $postFilter = true;
    // 网页信息 array(页面标题, 页面关键字, 页面描述)
    public    $pageInfo   = array('', '', '');
    // 缓存对象
    protected $cacher     = null;
    // 缓存名称
    protected $cacheName;
    // 是否运行追踪
    public    $trace      = true;
    // 视图基础目录
    protected $templateDir;
    // 构造函数
    public function __construct(){}
    // 初始化函数,系统自动调用,相当于构造函数
    public function __init(){}
    // 默认 index 方法
    public function index(){}
    // 视图展示方法
    public function display($tplName = null){}
    // 语言包设置
    protected function setLang($langType){ }
    // 输出 json 形式的信息并终止程序运行
    protected function json($data, $type = 'ok'){}
    // 获取数据列表
    protected function dataList($everyPagerNum = 20, $fields = '*'){}
    // 利用 id 获取一条数据
    protected function getDataById(){}
    // 获取一条数据并以默认值形式复制给对应表单元素
    protected function getDefaultVal($exception = array()){}
    // 跳转到应用首页
    public function skipToIndex(){}
    // 获取缓存对象
    protected function getCacher(){}
    // 设置并获取缓存数据
    protected function cache($name, $id = null, $queryMethod, $timer = 3600, $isSuper = true){}
    // 清除全部缓存
    public function clearCache(){}
    // 清除指定缓存
    public function removeCache($name, $id = null, $isSuper = true){}
    // 初始化 gets 数据
    // 如果某个指定的数据为空则进行定义及赋值
    protected function initGets($key, $val = ''){}
    // 将 gets 指定数据整数化
    protected function intGets($key, $val = 0){}
}

3. 基础控制器扩展

您可以扩展基础控制器,然后自己创建的控制器都继承自己的控制器,这样可以实现更多全局功能,例 :
网站后台控制器扩展  : 

<?php
/**
 * 管理后台 -> 基础控制器
 */
class baseController extends grace{
   
   public function __init(){
      parent::__init();
      $this->checkLogin();
   }
   
   protected function checkLogin($auth = null){
       if(empty($_SESSION['graceMangerId'])){
           // 注意 login 控制器不要继承 baseController 而是 grace
           // 要不会造成死循环
           header('location:'.PG_SROOT.'login'); 
           pgExit();
       }
    }
    //... 其他代码

上面的代码演示了 :
网站后台管理系统开发时,大部分页面都需要检查后台管理员的登录信息,我们在自定义基础控制器内封装 checkLogin() 方法对用户登录信息进行检查,如果用户没有登录会跳转到登陆页面。同时利用 __init() 函数自动执行检查函数。
有了上面的基础控制器,我们在开发网站后台时就可以这样创建控制器 : 
class 自定义控制 extends 自定义基础控制器。

<?php
class systemController extends baseController{
   
   public function __init(){
      parent::__init();
      $this->checkAuth();
   }
   
   public function index(){}
   //....
}