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
默默简单的写了一个模板引擎
Jan 02 PHP
几个php应用技巧
Mar 27 PHP
鸡肋的PHP单例模式应用详解
Jun 03 PHP
利用PHP实现图片等比例放大和缩小的方法详解
Jun 06 PHP
PHP禁止个别IP访问网站
Oct 30 PHP
php出现web系统多域名登录失败的解决方法
Sep 30 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
简单概括PHP的字符串中单引号与双引号的区别
May 07 PHP
PHP实现文字写入图片功能
Feb 18 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
JS 网站性能优化笔记
2011/05/24 PHP
PHP常见数组函数用法小结
2016/03/21 PHP
深入浅析PHP无限极分类的案例教程
2016/05/09 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
Ajax异步提交表单数据的说明及方法实例
2013/06/22 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
javascript跨域原因以及解决方案分享
2015/04/08 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
Vue实现简易购物车页面
2020/12/30 Vue.js
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
2020/12/30 Vue.js
python检测远程udp端口是否打开的方法
2015/03/14 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
Python hashlib模块用法实例分析
2018/06/12 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
使用WingPro 7 设置Python路径的方法
2019/07/24 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
介绍一下UNIX启动过程
2013/11/14 面试题
个人求职信范文分享
2013/12/13 职场文书
大学学习生活感言
2014/01/18 职场文书
买房委托公证书
2014/04/08 职场文书
学校运动会霸气口号
2014/06/07 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
签约仪式致辞
2015/07/30 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
Python开发简易五子棋小游戏
2022/05/02 Python
Python PIL按比例裁剪图片
2022/05/11 Python