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 相关文章推荐
3种平台下安装php4经验点滴
Oct 09 PHP
我的论坛源代码(八)
Oct 09 PHP
php下使用以下代码连接并测试
Apr 09 PHP
php mysql索引问题
Jun 07 PHP
PHP 日志缩略名的创建函数代码
May 26 PHP
php实现获取局域网所有用户的电脑IP和主机名、及mac地址完整实例
Jul 18 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
Jul 29 PHP
php中preg_replace_callback函数简单用法示例
Jul 21 PHP
PHP定义字符串的四种方式详解
Feb 06 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
May 06 PHP
解决Laravel5.2 Auth认证退出失效的问题
Oct 14 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 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
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
NodeJS制作爬虫全过程
2014/12/22 NodeJs
举例讲解JavaScript substring()的使用方法
2015/11/09 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
2019/01/29 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
python反编译学习之字节码详解
2019/05/19 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
Python适配器模式代码实现解析
2019/08/02 Python
Python递归函数特点及原理解析
2020/03/04 Python
如何理解python面向对象编程
2020/06/01 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
Oracle性能调优原则
2012/05/03 面试题
创业计划书撰写原则
2014/01/25 职场文书
八年级语文教学反思
2014/02/11 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
心理咨询承诺书
2014/05/20 职场文书
工地质量标语
2014/06/12 职场文书
质量提升方案
2014/06/16 职场文书
受资助学生感谢信
2015/01/21 职场文书
清明节寄语2015
2015/03/23 职场文书
初中语文教学反思范文
2016/03/03 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang