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 身份验证方面的函数
Oct 11 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
php数据库抽象层 PDO
May 07 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
PHP基础知识回顾
Aug 16 PHP
Zend的Registry机制的使用说明
May 02 PHP
PHP 动态生成静态HTML页面示例代码
Jan 15 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 PHP
php自定义函数截取汉字长度
May 15 PHP
php中静态类与静态变量用法的区别分析
Jan 15 PHP
PHP实现动态执行代码的方法
Mar 25 PHP
Smarty变量用法详解
May 11 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
php实现图片压缩处理
2020/09/09 PHP
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
自动刷新网页,自动刷新当前页面,JS调用
2013/06/24 Javascript
js实现的map方法示例代码
2014/01/13 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
JS字符串的切分用法实例
2016/02/22 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
2016/11/03 Javascript
AngularJS使用ng-app自动加载bootstrap框架问题分析
2017/01/04 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
jQuery实现的手动拖动控制进度条效果示例【测试可用】
2018/04/18 jQuery
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
[42:39]老党炸弹人试玩视频
2014/09/03 DOTA
Python实现获取某天是某个月中的第几周
2015/02/11 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
2015/08/07 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
python:动态路由的Flask程序代码
2019/11/22 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
linux比较文件内容的命令是什么
2013/03/04 面试题
初中三好学生自我鉴定
2014/04/07 职场文书
初中同学会活动方案
2014/08/22 职场文书
机动车登记业务委托书
2014/10/08 职场文书
合同补充协议书
2016/03/24 职场文书
Spring Data JPA框架Repository自定义实现
2022/04/28 Java/Android