CodeIgniter 基类的继承

    开发一个总后台需要在基类里面判断session是否登陆,不可能在每一个控制器的构造方法里面挨个判断,所以就需要一个后台的基类来判断,每一个控制器继承这个基类。AdminBase 为应用后台的公用的控制器,在每一个应用后台控制器里面都来继承公共的AdminBase ,但是同时要确保AdminBase 也是继承CI_Controller的。

    具体实现很简单,只要在application/core下面新建MY_Controller.php,代码如下

(MY_是可配置的,application/config/config.php 文件并找到这一项:$config['subclass_prefix'] = 'MY_';)

<?php
/**
 * 扩展 Controller
 */
class MY_Controller extends CI_Controller
{
    function  __construct()
    {
        parent::__construct();
    }
}

/**
 * 后台管理基类
 */
class AdminBase extends MY_Controller
{
    function  __construct()
    {
        parent::__construct();
        /* 验证session是否登陆 */
        $admin_sess = $this->session->userdata( 'admin' );
        if ( isset( $admin_sess ) && $admin_sess['admin_id'] != '' )
        {
            /* Success Login ... */
        }
        else
        {
            error( '请登录后台', site_url() . '/AdminLogin/login' );
        }
    }
}

/**
 * 会员基类
 */
class UserBase extends MY_Controller
{
    function  __construct()
    {
        parent::__construct();
    }
}

/**
 * 前台基类
 */
class HomeBase extends MY_Controller
{
    function  __construct()
    {
        parent::__construct();
    }
}

然后在application/controllers里面的控制器就可以继承了,比如application/controllers/AdminIndex.php中

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

/**
 * 管理后台主页
 */
class AdminIndex extends AdminBase
{

    /**
     * 构造方法
     * @author Yusure  http://yusure.cn
     * @date   2016-09-13
     * @param  [param]
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * 后台主页
     * @author Yusure  http://yusure.cn
     * @date   2016-09-13
     * @param  [param]
     * @return [type]     [description]
     */
    public function index()
    {
        $this->load->view( 'AdminIndex_index' );
    }
}


评论