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的面试题集
Nov 19 PHP
php xfocus防注入资料
Apr 27 PHP
PHP 巧用数组降低程序的时间复杂度
Jan 01 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
PHP优于Node.js的五大理由分享
Sep 15 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
Oct 06 PHP
php除数取整示例
Apr 24 PHP
php去除数组中重复数据
Nov 18 PHP
php中mail函数发送邮件失败的解决方法
Dec 24 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
php查询及多条件查询
Feb 26 PHP
PHP应用跨时区功能的实现方法
Mar 21 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删除字符串末尾子字符,删除开始字符,删除两端字符(实现代码)
2013/06/27 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
js中setTimeout()与clearTimeout()用法实例浅析
2015/05/12 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
python实现识别相似图片小结
2016/02/22 Python
详解Python中的文件操作
2016/08/28 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
Python基础学习之常见的内建函数整理
2017/09/06 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
python中lambda()的用法
2017/11/16 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
Vertbaudet西班牙网上商店:婴儿服装、童装、母婴用品和儿童家具
2019/10/16 全球购物
党员一帮一活动总结
2014/07/08 职场文书
2014年少先队工作总结
2014/12/03 职场文书
小学生交通安全寄语
2015/02/27 职场文书
Python基础之数据类型知识汇总
2021/05/18 Python
springboot入门 之profile设置方式
2022/04/04 Java/Android
Java设计模式之代理模式
2022/04/22 Java/Android