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 相关文章推荐
我的群发邮件程序
Oct 09 PHP
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
用php+javascript实现二级级联菜单的制作
May 06 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
May 03 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
Sep 27 PHP
跟我学Laravel之请求与输入
Oct 15 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
一个完整的php文件上传类实例讲解
Oct 27 PHP
PHP浮点比较大小的方法
Feb 14 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 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
PHP 各种排序算法实现代码
2009/08/20 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
javascript中基本类型和引用类型的区别分析
2015/05/12 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
小程序实现左右来回滚动字幕效果
2018/12/28 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
Python中if __name__ == &quot;__main__&quot;详细解释
2014/10/21 Python
10个Python小技巧你值得拥有
2018/09/29 Python
python实现换位加密算法的示例
2018/10/14 Python
Python数据类型之List列表实例详解
2019/05/08 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
九年级语文教学反思
2014/02/04 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
募捐倡议书怎么写
2014/05/14 职场文书
大学生推广普通话演讲稿
2014/09/21 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
python中subplot大小的设置步骤
2021/06/28 Python
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
redis复制有可能碰到的问题汇总
2022/04/03 Redis
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript