Codeigniter中对核心类的扩展

简介: Codeigniter框架提供了实现多个应用Application的方法,如参考资料[2]中描述的,这种方法实际上是在网站目录下存在多个入口文件和Application文件夹的方式。这种方式实现有个缺点,加入我做了一个应用放在Application下,同时为这个应用做了一个后台放在Admin文件夹下,实际上Model里的模块是可以共用的,但是使用这种方式却不得不将Model做一份拷贝,当然我们也可以使用软链的方式来避免硬拷贝,但是用起来总是不爽。

Codeigniter框架提供了实现多个应用Application的方法,如参考资料[2]中描述的,这种方法实际上是在网站目录下存在多个入口文件和Application文件夹的方式。这种方式实现有个缺点,加入我做了一个应用放在Application下,同时为这个应用做了一个后台放在Admin文件夹下,实际上Model里的模块是可以共用的,但是使用这种方式却不得不将Model做一份拷贝,当然我们也可以使用软链的方式来避免硬拷贝,但是用起来总是不爽。

所以一般我在开发后台的时候,喜欢在 controller 目录下建立一个单独的后台文件夹,例如 controller/admin/,这样就可以实现Model的共用。Controller中的文件需要一些公共的方法,在Codeigniter中,当我们需要在所有的控制器Controller中添加一些公共方法时,可以考虑对Controller进行扩展。例如用户登录的检查函数,具体的方法我们可以参考[1]中的描述。如果我的前台页面不需要检查登录,后台页面需要检查登录,使用这种方法就会有问题。那么我们能不能定义两个可被继承的Controller呢,例如一个叫做My_Controller一个叫做My_AdminController,很可惜的是不行。

扩展核心类的实现代码,位于System/Core/Codeigniter.php的第214行,代码如下:

   1:  if (file_exists(APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller'.EXT))
   2:  {
   3:        require APPPATH.'core/'.$CFG->config['subclass_prefix'].'Controller'.EXT;
   4:  }

由此可见,我们无法定义一个MY_Controller给前台调用,一个MY_AdminController给后台调用。

在这里只好使用一种变通的方法,通过url的segment来判断,代码如下:

   1:  class MY_Controller extends CI_Controller {
   2:     function __construct(){
   3:        parent::__construct();
   4:        if( $this->uri->segment(1) === 'admin' ){
   5:                       ...
   6:        }
   7:     }
   8:  }

希望在Codeigniter的3.0版本中能够有些改善。

适用的Codeigniter版本:2.0及以上。

参考资料:

1、Extending Codigniter's Controller

2、Manage Applications

3、Codeigniter extends core class

4、Codeigniter uri

5、Codeigniter 3.0

相关文章
|
6月前
|
缓存 监控 安全
AOP则关注如何将那些影响多个类的功能模块化
AOP则关注如何将那些影响多个类的功能模块化
|
3月前
|
存储 NoSQL 数据处理
组合和继承怎么集成一个性能较好的项目
组合与继承是面向对象编程的核心概念,前者通过对象间关联实现高效解耦,后者则重用代码以节省空间和内存。组合常用于现代项目,利用代理与依赖注入简化代码管理;而继承简化了子模块对父模块资源的应用,但修改会影响整体。随着分层解耦及微服务架构如SpringCloud的出现,这些技术进一步优化了数据处理效率和服务响应性能,尤其在分布式存储与高并发场景下。同步异步调用、Redis分布式应用等也广泛运用组合与继承,实现代码和内存空间的有效复用。
|
7月前
|
安全 Java 程序员
Spring框架的核心特性是什么?
【4月更文挑战第30天】Spring 的特性
384 0
|
6月前
|
存储 XML Java
探索Java常用的包:从核心到扩展
探索Java常用的包:从核心到扩展
96 3
|
存储 设计模式 前端开发
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
“深入理解自定义MVC:构建灵活可定制的Java应用程序”
53 0
|
Oracle 架构师 关系型数据库
C#反射应用之实现动态可配置可扩展框架的简单示例
C#反射应用之实现动态可配置可扩展框架的简单示例
|
SQL 存储 JSON
【自然框架】之数据访问 —— 再小的类库也需要设计。
  以前也写过几篇关于数据访问的,这里是最新的总结。麻雀虽小五脏俱全,数据访问也许不起眼,但是也要好好的设计一翻。从2004年开始用自己的数据访问,一直到现在,经历过两次大的改版,随着需求的变化,也增加了不少的功能,小修小改那就更多了。
1026 0
|
Go C# 图形学
Unity3D中对系统类进行扩展教程(简化代码逻辑)
Unity中对系统类进行扩展的方法 Unity扩展系统类,简化代码 本文提供全流程,中文翻译。 助力快速完成 Unity 对系统类进行扩展,添加函 新建一个脚本,名称随意 类必须设为静态 Static ,函数同样(这样才能通过其他类,直接访问到扩展函数) 形参为 this + 需要扩展的类 此时,我们通过 transform.
1479 0
|
缓存 NoSQL 数据库
3.NetDh框架之缓存操作类和二次开发模式简单设计(附源码和示例代码)
前言 NetDh框架适用于C/S、B/S的服务端框架,可用于项目开发和学习。目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型、多库实例,简单强大; 此部分具体说明可参考博客: https://www.
1302 0