CI框架扩展系统核心类的方法分析


Posted in PHP onMay 23, 2016

本文实例讲述了CI框架扩展系统核心类的方法。分享给大家供大家参考,具体如下:

首先你系统扩展类是放在application/core下面的,本来系统核心类是CI_Controller,所以你不能以CI_开头了,你需要打开 application/config/config.php 修改:

$config['subclass_prefix'] = 'MY_';

为你的前缀!

一些公共的模块就可以卸载自己的核心类里面了!

这几天读了Dilicms(轻量级的后台架构),比如说他的后台扩展类是这样的:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
abstract class Admin_Controller extends CI_Controller
{
  /**
  * _admin
  * 保存当前登录用户的信息
  *
  * @var object
  * @access public
  **/
  public $_admin = NULL;
  /**
  * 构造函数
  *
  * @access public
  * @return void
  */
  public function __construct()
  {
    parent::__construct();
    $this->load->library('session');
    $this->settings->load('backend');
    $this->load->switch_theme(setting('backend_theme'));
    $this->_check_login();
    $this->load->library('acl');
    $this->load->library('plugin_manager');
  }
 /**
  * 检查用户是否登录
  *
  * @access protected
  * @return void
  */
  protected function _check_login()
  {
    if ( ! $this->session->userdata('uid'))
    { 
      redirect(setting('backend_access_point') . '/login');
    }
    else
    {
      $this->_admin = $this->user_mdl->get_full_user_by_username($this->session->userdata('uid'), 'uid');
      if ($this->_admin->status != 1)
      {
        $this->session->set_flashdata('error', "此帐号已被冻结,请联系管理员!");
        redirect(setting('backend_access_point') . '/login');
      }
    }
  }
 /**
  * 加载视图
  *
  * @access protected
  * @param string
  * @param array
  * @return void
  */
  protected function _template($template, $data = array())
  {
    $data['tpl'] = $template;
    $this->load->view('sys_entry', $data);
  }
 /**
  * 检查权限
  *
  * @access protected
  * @param string
  * @return void
  */
  protected function _check_permit($action = '', $folder = '')
  {
    if ( ! $this->acl->permit($action, $folder))
    {
      $this->_message('对不起,你没有访问这里的权限!', '', FALSE);
    }
  }
 /**
  * 信息提示
  *
  * @access public
  * @param string
  * @param string
  * @param bool
  * @param string
  * @return void
  */
  public function _message($msg, $goto = '', $auto = TRUE, $fix = '')
  {
    if($goto == '')
    {
      $goto = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : site_url();
    }
    else
    {
      $goto = strpos($goto, 'http') !== false ? $goto : backend_url($goto);  
    }
    $goto .= $fix;
    $this->_template('sys_message', array('msg' => $msg, 'goto' => $goto, 'auto' => $auto));
    echo $this->output->get_output();
    exit();
  }
}

它就把一些公共信息入验证,登陆,跳转放在Admin_Controller里面,于是我在写前台的时候也是这样操作,扩展了Font_Controller:

abstract class Font_Controller extends CI_Controller{
 public function __construct() {
  parent::__construct();
 }
 //前台加载视图方法
 public function _template($template, $data = array()){
  $data['nav'] = $this->get_nav();
  $data['tpl'] = $template;
  $this->load->view('default',$data);
 }
 //公共导航信息
 public function get_nav(){
 }
 //公共友情链接信息
 public function get_friendlink(){
 }
}

提示,一些经常用到得工具和函数可以放在helper中!

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
解析获取优酷视频真实下载地址的PHP源代码
Jun 26 PHP
PHP APC配置文件2套和参数详解
Jun 11 PHP
php中用memcached实现页面防刷新功能
Aug 19 PHP
thinkPHP实现表单自动验证
Dec 24 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
php短址转换实现方法
Feb 25 PHP
php数组合并与拆分实例分析
Jun 12 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
PHP数组操作简单案例分析
Oct 15 PHP
php文件管理基本功能简单操作
Jan 16 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP代码覆盖率统计详解
Jul 22 PHP
PHP strip_tags保留多个HTML标签的方法
May 22 #PHP
项目中应用Redis+Php的场景
May 22 #PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 #PHP
php文件上传后端处理小技巧
May 22 #PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
May 22 #PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 #PHP
制作个性化的WordPress登陆界面的实例教程
May 21 #PHP
You might like
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
国外十大最流行的PHP框架排名
2013/07/04 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
Angular 4依赖注入学习教程之ClassProvider的使用(三)
2017/06/04 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
微信小程序解析富文本过程详解
2019/07/13 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
python里将list中元素依次向前移动一位
2014/09/12 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
Python的迭代器和生成器
2015/07/29 Python
python绘制地震散点图
2019/06/18 Python
python aiohttp的使用详解
2019/06/20 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
python使用socket实现的传输demo示例【基于TCP协议】
2019/09/24 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
Python绘图之二维图与三维图详解
2020/08/04 Python
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
怎样声明接口
2014/09/19 面试题
兼职学生的自我评价
2013/11/24 职场文书
高一历史教学反思
2014/01/13 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
质量保证书格式模板
2015/02/27 职场文书
劳保用品管理制度范本
2015/08/06 职场文书
2016年国陪研修感言
2015/11/18 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android