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开发大型项目的一点经验
Oct 09 PHP
一个简洁的多级别论坛
Oct 09 PHP
解决GD中文乱码问题
Feb 14 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
php实现递归与无限分类的方法
Feb 16 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
Apr 17 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
全面解析PHP操作Memcache基本函数
Jul 14 PHP
php实现将base64格式图片保存在指定目录的方法
Oct 13 PHP
php fread函数使用方法总结
May 28 PHP
thinkphp5框架路由原理与用法详解
Feb 11 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
php生成随机密码的三种方法小结
2010/09/04 PHP
根据ip调用新浪api获取城市名并转成拼音
2014/03/07 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
javascript之大字符串的连接的StringBuffer 类
2007/05/08 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
2013/08/02 Javascript
10条建议帮助你创建更好的jQuery插件
2015/05/18 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
使用postMesssage()实现iframe跨域页面间的信息传递
2016/03/29 Javascript
js微信分享API
2020/10/11 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
[48:27]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python版学生管理系统
2018/01/10 Python
python语言基本语句用法总结
2019/06/11 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
2019/08/27 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
7 For All Mankind官网:美国加州洛杉矶的高级牛仔服装品牌
2018/12/20 全球购物
大专生的学习自我评价
2013/12/04 职场文书
在校生自我鉴定
2014/01/23 职场文书
股东合作协议书范本
2014/04/14 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
小学生手册家长意见
2015/06/03 职场文书
win10双系统怎么删除一个系统?win10电脑有两个系统删除一个的操作方法
2022/07/15 数码科技