CodeIgniter自定义控制器MY_Controller用法分析


Posted in PHP onJanuary 20, 2016

本文实例讲述了CodeIgniter自定义控制器MY_Controller用法。分享给大家供大家参考,具体如下:

Codeigniter所有的控制器都必须继承CI_Controller类,但CI_Controller类位于system目录下,不太方便修改。为方便做一些公用的处理,通常情况下我们会在core下创建MY_Controller,用来继承CI_Controller,从而项目中所有的控制器继承MY_Controller。

那么,MY_Controller 通常会做些什么呢?

所有的控制器都继承了MY_Controller, MY_Controller常常会加载一些公用帮助函数、公用类库,以及实现一些公用的方法。

公用的方法?公有的方法?

看到这些方法会意识到一个问题,如果方法是public的,那是否可以通过浏览器访问到。答案是可以的!这样不该让用户访问到的方法让用户访问到了。那设置protected吧。。。

备注:CI_Controller中写public方法不会被访问到,框架限制了CI_Controller中方法通过浏览器访问。

随着项目的不断进展,MY_Controller中的公用方法会越来越多。如果此时要增加后台管理的功能,所有的控制器依然继承MY_Controller,那其中的很多方法可能不适用了。如果后台需要的一些公用方法也写在这里,这里将会变得混乱。

如何按模块区分不同的控制器?

有两种处理的方式,第一种是通过不同的公用控制器文件来区分,由控制器去决定继承哪一个公用控制器,当然这里得引入公用文件。还有这种方式是可以通过对象的一个属性来维护,不同的模块赋予该属性不同的对象。如:

<?php 
if ( ! defined('BASEPATH'))
  exit('No direct script access allowed');
class MY_Controller extends CI_Controller
{
 public function __construct($type = NULL)
 {
   parent::__construct();
   switch($type) {
    case 'api' :
     $this->load->library('api_helper', NULL, 'helper');
     break;
    case 'admin' :
     $this->load->library('admin_helper', NULL, 'helper');
      break;
    default :
     $this->load->library('app_helper', NULL, 'helper');
      break
   }
 }
}
/* End of file MY_Controller.php */
/* Location: ./application/core/MY_Controller.php */

控制器调用MY_Controller构造函数并传入type值,根据不同的type值会加载不同的类库,然后给类定义一个统一的别名,方便处理。具体的library可以处理该模块公用的方法或load公用的资源,相当于该模块的一个公用类。当然处理方式也可以是直接通过路由中的目录名或者控制器名称来控制等等。

这样避免了加载不同的文件,调用方法时只需要通过$this->helper对象调用。在仔细看看,可以发现不同模块的公用类是放在library中,放在library或helper中都可以使用get_intance获取控制器对象,但每次使用都需要获取实例,相对麻烦,如果是模型呢?感觉也不太好。其中的公用方法有一些会跟业务逻辑相关,放在library感觉不太合适。

业务逻辑好像并没有一个好的地方去实现,控制器的私有方法?模型?

先总结下上面的处理方法:

1、不同模块之间可以按需加载以及实现自定义的公用方法,各个模块之间互不影响。如果各模块之间的公用方法比较多,也可以再去继承一个公用的类。

2、公用方法放在library中,调用CI实例不方便。

3、如果不喜欢$this->herlper的调用方法,可以让控制器去继承不同的公用控制器,思路是一样的,只是可能需要手动引入文件。

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php smarty 二级分类代码和模版循环例子
Jun 01 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
PHP根据IP判断地区名信息的示例代码
Mar 03 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
PHP编译configure时常见错误的总结
Aug 17 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
如何用PHP实现多线程编程
May 26 PHP
详解Laravel服务容器的优势
May 29 PHP
CodeIgniter钩子用法实例详解
Jan 20 #PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 #PHP
CodeIgniter多语言实现方法详解
Jan 20 #PHP
CI(CodeIgniter)模型用法实例分析
Jan 20 #PHP
教你php如何实现验证码
Jan 20 #PHP
CodeIgniter辅助之第三方类库third_party用法分析
Jan 20 #PHP
CodeIgniter扩展核心类实例详解
Jan 20 #PHP
You might like
PHP 读取和修改大文件的某行内容的代码
2009/10/30 PHP
php获取文件夹路径内的图片以及分页显示示例
2014/03/11 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
jquery select(列表)的操作(取值/赋值)
2011/03/16 Javascript
Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
2013/11/14 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
2016/08/19 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
详解前端路由实现与react-router使用姿势
2017/08/07 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
python生成器的使用方法
2013/11/21 Python
Python读大数据txt
2016/03/28 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
python机器学习之随机森林(七)
2018/03/26 Python
pytorch多进程加速及代码优化方法
2019/08/19 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
2020/02/07 Python
Python使用uuid库生成唯一标识ID
2020/02/12 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
Skechers越南官方网站:来自美国的运动休闲品牌
2021/02/22 全球购物
简单介绍Object类的功能、常用方法
2013/10/02 面试题
幼儿教师工作感言
2014/02/14 职场文书
食品工程专业求职信
2014/06/15 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
会计电算化实训报告
2014/11/04 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
交通安全学习心得体会
2016/01/18 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle