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的FTP学习(一)[转自奥索]
Oct 09 PHP
杏林同学录(二)
Oct 09 PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
初次接触php抽象工厂模式(Elgg)
Mar 21 PHP
php中文验证码实现示例分享
Jan 12 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
Apr 24 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
Oct 14 PHP
PHP实现文件下载详解
Nov 27 PHP
php断点续传之文件分割合并详解
Dec 13 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 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 Memcache 中实现消息队列
2009/11/24 PHP
php中3des加密代码(完全与.net中的兼容)
2012/08/02 PHP
php之Memcache学习笔记
2013/06/17 PHP
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
jquery插件开发注意事项小结
2013/06/04 Javascript
用js设置下拉框为只读的小技巧
2014/04/10 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
JavaScript实现简单的日历效果
2016/09/25 Javascript
微信小程序 实现拖拽事件监听实例详解
2016/11/16 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
js数据类型检测总结
2018/08/05 Javascript
Python实现telnet服务器的方法
2015/07/10 Python
python如何统计序列中元素
2020/07/31 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
python统计中文字符数量的两种方法
2019/01/31 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
英国第一豪华护肤品牌:Elemis
2017/10/12 全球购物
英国女性时尚鞋类的潮流制造者:Koi Footwear
2018/10/19 全球购物
为什么需要版本控制
2016/10/28 面试题
汽车驾驶求职信
2013/10/25 职场文书
毕业生自我鉴定
2013/12/04 职场文书
《颐和园》教学反思
2014/02/26 职场文书
党支部公开承诺践诺书
2014/03/28 职场文书
授权委托书格式
2014/07/31 职场文书
微观世界观后感
2015/06/10 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python