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 时间转换Unix时间戳代码
Jan 22 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
使用Curl进行抓取远程内容时url中文编码问题示例探讨
Oct 29 PHP
浅析php适配器模式(Adapter)
Nov 25 PHP
浅谈PHP中Stream(流)
Jun 08 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
Yii实现简单分页的方法
Apr 29 PHP
php进程间通讯实例分析
Jul 11 PHP
ThinkPHP5框架缓存查询操作分析
May 30 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 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中this,self,parent的区别详解
2013/06/08 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
PHP实现的下载远程图片自定义函数分享
2015/01/28 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
js 右侧浮动层效果实现代码(跟随滚动)
2015/11/22 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
LayUI动态设置checkbox不显示的解决方法
2019/09/02 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
Python中endswith()函数的基本使用
2015/04/07 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
从django的中间件直接返回请求的方法
2018/05/30 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
详解python statistics模块及函数用法
2019/10/27 Python
python之语音识别speech模块
2020/09/09 Python
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
党的生日演讲稿
2014/09/10 职场文书
党员批评与自我批评发言材料
2014/10/14 职场文书
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js