[核心代码 Core] [2.0.2]为 CodeIgniter 增加 HMVC 支持【更新日期:2011.8.25

注意:只支持 PHP5 环境。

HMVC 扩展开源项目地址:https://bitbucket.org/codeigniter_chinese/codeigniter-hmvc

先看看什么是 HMVC:http://zh.wikipedia.org/wiki/HMVC

一直感觉 CodeIgniter 缺乏好的 HMVC 架构,而且我个人认为目前的几个 HMVC 第三方类库都不是很好,有的要修改 CI 的源代码,有的要引入新的语法,这都不是我喜欢的方式,所以我自己研究了一个方案,希望大家多多提出宝贵意见。
我的 HMVC 特点就是不修改 CI 源代码,不引入新的语法,完全是利用 CI 强大的扩展机制。

目前的扩展方式是在 application 目录下增加 modules 目录,每个模块有自己的目录,并且模块可以有一级子目录,比如 application/modules/目录/模块名/....;
每个模块都有自己的 MVC 结构,像这样 application/modules/模块名/controllers; application/modules/模块名/models; application/modules/模块名/views

模块类名必须是类似这样的:目录_模块名_控制器名_module
(如:Account_Message_Home_module)
模块名和模块类名不一样,如上例,模块名就是 message,模块名也是模块文件名,如 message.php
在视图中装载模块:
PHP
$this->load->module('模块名/控制器/方法');
复制代码
这里也可以使用 URL 路由中的默认控制器,默认的方法是 index() 方法,和普通控制器保持一致。
如果要传递参数:
PHP
$this->load->module('模块名/控制器/方法', array('参数1', '参数2', ...));
复制代码
如果需要返回模块的结果而不想输出到屏幕,可以把第 3 个参数设置为 TRUE:
PHP
$this->load->module('模块名', array('参数1', '参数2', ...), TRUE);
复制代码

如果需要从 URL 访问某个模块的某个方法,URL 规则是这样的:

http://domain/index.php/module/模块名/控制器/方法
实际上 /module 后面的内容和前面传入 $this->load->module() 中的参数一致。
如果要通过 URL 传递参数,则直接加在 URL 后面:

http://domain/index.php/module/模块名/控制器/方法/参数1/参数2/..../参数n
另外,这里的 URI 可以使用路由规则,也就是说什么样的 URL 都可以,只要最后路由成符合上面的规则即可,比如要使用这样的 URL:

http://domain/index.php/m/模块名/控制器/方法
可以在 routers.php 里添加一个路由规则:

PHP
$route['m/(:any)'] = 'module/$1';
复制代码

如果要在某个模块的视图里生成访问当前模块当前控制器的某方法的 URL,可以在视图里这样写:

PHP
<?php echo $this->module_url('要访问的方法名/参数1/..../参数n'); ?>
复制代码
如果要生成当前模块其他控制器的方法的 URL,可以这样:

PHP
<?php echo $this->module_url('要访问的方法名/参数1/..../参数n', '控制器名'); ?>
复制代码


基本上就是这样,如果大家有不清楚的,我会详细解答。

提供下载压缩包中有控制器、模型、视图和模块的简单例子,并且其中只包含模块所需的代码,不包含 CI 核心代码。


更新记录:
2011.8.9 修复从 URL 访问 Module 的时候,autoload 无效的 BUG。感谢 lucky9805 报告此 BUG。
2011.7.28 增加从 URL 访问 Module 的功能。
2011.4.13 修正 autoload 对 module 无效的 BUG,感谢 benfeng 报告此问题!
2011.4.11 支持最新的 CI 2.0.0,完全为 PHP5 重写 HMVC 所有代码。
2011.1.8 支持在控制器里直接载入一个或多个模块;修复在模块里装载类库报错的 BUG;
2010.12.15 支持在控制器中直接装载模块。
2010.8.7 修正一个在 Module 的构造函数中装载 Model 报错的 BUG,感谢 coeus 报告此问题!
http://codeigniter.org.cn/forums/thread-1319-1-3.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值