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安装问题
Oct 09 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
mysql下创建字段并设置主键的php代码
May 16 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
php curl基本操作详解
Jul 23 PHP
php 强制下载文件实现代码
Oct 28 PHP
PHP数据库链接类(PDO+Access)实例分享
Dec 05 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
PHP设计模式之简单投诉页面实例
Feb 24 PHP
PHP单链表的实现代码
Jul 05 PHP
PHP+MySQL使用mysql_num_rows实现模糊查询图书信息功能
May 31 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笔记 字符串处理
2010/10/19 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
2016/02/27 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP大文件分片上传的实现方法
2018/10/28 PHP
PHP实现时间日期友好显示实现代码
2019/09/08 PHP
js中匿名函数的N种写法
2010/09/08 Javascript
详解JavaScript语法对{}处理的坑爹之处
2014/06/05 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
4种JavaScript实现简单tab选项卡切换的方法
2016/01/06 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
Python正则简单实例分析
2017/03/21 Python
利用Python找出序列中出现最多的元素示例代码
2017/12/08 Python
Python 机器学习库 NumPy入门教程
2018/04/19 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
详解python datetime模块
2020/08/17 Python
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
学习委员自我鉴定
2014/01/13 职场文书
小学作文评语大全
2014/04/21 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
志愿者事迹材料
2014/12/26 职场文书
拖欠货款起诉状
2015/05/20 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python