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 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
PHP设计模式 注册表模式
Feb 05 PHP
php 操作调试的方法
Jul 12 PHP
处理单名多值表单的详解
Jun 08 PHP
PHP数据类型的总结分析
Jun 13 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
Jan 26 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
19个Android常用工具类汇总
Dec 30 PHP
PHP获取文件夹大小函数用法实例
Jul 01 PHP
php生成数字字母的验证码图片
Jul 14 PHP
Thinkphp 框架扩展之应用模式实现方法分析
Apr 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
PHP概述.
2006/10/09 PHP
php将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php Static关键字实用方法
2010/06/04 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
PHP中soap的用法实例
2014/10/24 PHP
php递归创建目录的方法
2015/02/02 PHP
ThinkPHP发送邮件示例代码
2016/10/08 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
jQuery控制的不同方向的滑动(向左、向右滑动等)
2014/07/18 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
2017/11/15 Javascript
JavaScript控制浏览器全屏显示简单示例
2018/07/05 Javascript
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
详细介绍解决vue和jsp结合的方法
2020/02/06 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
Python中.py文件打包成exe可执行文件详解
2017/03/22 Python
详谈python http长连接客户端
2017/06/12 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Python多线程处理实例详解【单进程/多进程】
2019/01/30 Python
Python-接口开发入门解析
2019/08/01 Python
Python代码一键转Jar包及Java调用Python新姿势
2020/03/10 Python
Python sorted对list和dict排序
2020/06/09 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
小学教师寄语大全
2014/04/03 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
javaScript Array api梳理
2021/03/31 Javascript
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers