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
图书管理程序(二)
Oct 09 PHP
mac下使用brew配置环境的步骤分享
May 23 PHP
php指定函数参数默认值示例代码
Dec 04 PHP
codeigniter使用技巧批量插入数据实例方法分享
Dec 31 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
Jul 01 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
php显示时间常用方法小结
Jun 05 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
PHP模糊查询的实现方法(推荐)
Sep 06 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
PHP实现文件上传与下载
Aug 28 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 explode函数实例代码
2012/02/27 PHP
php实现数组中索引关联数据转换成json对象的方法
2015/07/08 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
解决php扩展安装不生效问题
2019/10/25 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
学习YUI.Ext基础第一天
2007/03/10 Javascript
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
sliderToggle在写jquery的计时器setTimeouter中不生效
2014/05/26 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
微信小程序教程系列之视图层的条件渲染(10)
2017/04/19 Javascript
vue2.0之多页面的开发的示例
2018/01/30 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
详解基于webpack&amp;gettext的前端多语言方案
2019/01/29 Javascript
快速对接payjq的个人微信支付接口过程解析
2019/08/15 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
python保存文件方法小结
2018/07/27 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书