资讯专栏INFORMATION COLUMN

【译】CodeIgniter HMVC模块扩展使用文档

teren / 1286人阅读

摘要:和模块分离类似,模块扩展使得模块变得可便携的。模块化意味着模块化。但是,模块扩展更进一步,它允许这些模块互相通信。

CodeIgniter HMVC扩展说明

原文地址:Modular Extensions - HMVC

模块扩展——HMVC

模块扩展让CodeIgniter框架模块化。模块是一组独立的组件(通常有模型、控制器和视图),它们被分类在应用模块的子文件夹中,并且能够直接拖到其他的CodeIgniter应用中。

HMVC的意思是分层模型视图控制器。

模块控制器能够作为普通的控制器或者HMVC控制器使用,它们也能够被当做小部件帮助你开发一部分视图。

模块扩展安装

安装纯净的CI框架

设置$config["base_url"]变量

访问URL /index.php/welcome看到欢迎界面

将模块扩展的third_party文件拖入application/third_party目录

将模块扩展的core文件放入application/core目录,MY_Controller.php文件可以不放进去,除非你想自己写一个你自己的控制器继承

访问URL /index.php/welcome看到欢迎界面

创造模块目录结构application/modules/welcome/controllers

将控制器文件application/controllers/welcome.php移动至application/modules/welcome/controllers/welcome.php

访问URL /index.php/welcome看到欢迎界面

创建目录application/modules/welcome/views

11. 将视图文件application/views/welcome_message.php移动至application/modules/welcome/views/welcome_message.php
12. 访问URL /index.php/welcome看到欢迎界面

你现在应该拥有了一个正在运行的模块扩展了。

译者注:

为了便于大家理解HMVC,我这里展示使用HMVC前和使用HMVC后的目录结构

使用HMVC前:

使用HMVC后:

安装提示

第1~3步告诉你如何安装一个标准的CI框架,如果你已经安装了,跳至步骤4

第4~5步告诉你普通的CI框架在安装了MX之后仍然正常运行,它不应该打断正常的CI框架安装

第6~8步说明MX和CI控制器一起正常工作,控制器被移入welcome模块,视图文件仍在CI的application/views目录,MX能够在好几个地方发现模块资源,包括应用目录

第9~11步说明MX和在welcome模块中的控制器以及视图一起工作,在application/controllers以及application/views目录中此时应该没有文件了。

FAQ

Q: 什么是模块?我为什么要使用他们?

A: 参见维基百科:

http://en.wikipedia.org/wiki/Module)

http://en.wikipedia.org/wiki/Modular_programming)

http://blog.fedecarg.com/2008/06/28/a-modular-approach-to-web-development)

Q: 什么是模块化HMVC,为什么我应该使用它?

A: 模块化 HMVC = Multiple MVC triads

当你需要载入视图和视图中的数据的时候,这将是非常有用的。考虑添加一个购物车到一个页面中,这个购物车需要它自己的控制器,这个控制器要调用一个模型来获取购物车数据。然后控制器需要将数据载入到视图中。因此,和在主控制器处理这个页面和购物车不同,购物车MVC能够直接在页面中加载。这个主控制器不需要知道购物车MVC,并且和购物车MVC是完全隔离的。

在CI框架中,我们不能够在一次请求中调用多个控制器。因此,为了实现HMVC,我们不得不模拟控制器的行为。这用类库可以做到或者使用这个“模块扩展HMVC”。

使用一个类库和一个“模块扩展HMVC”类不同之处在于:

不需要在HMVC中获取和使用CI实例

HMVC类存储在modules目录中而不是类库目录中

Q: 模块扩展HMVC和模块分离是一样的么?

A: 是,也可以说不是。和模块分离类似,模块扩展使得模块变得“可便携的”。例如,如果你有一个漂亮的自包含MVC文件集,你能够将你的MVC文件加入到另一个项目中,仅仅通过复制一个目录就行了。所有文件都在同一个地方而不是散布在modelviewcontroller文件夹。

模块化HMVC意味着模块化MVC triads。 模块分离和模块扩展让相关的控制器、模型、类库、视图等等文件能够被打包在模块子目录中,并且能够像一个小型应用那样使用。但是,模块扩展更进一步,它允许这些模块互相通信。你能够不用通过与http交互得到控制器的输出内容。

特点

所有的控制器都包含一个$autoload类变量,这个类变量拥有一个运行时优先载入的条目(item)数组。这个功能能够和 module/config/autoload.php一起使用,然而,使用$autoload变量仅仅在对应的控制器中起作用。

 array("url", "form"),
        "libraries" => array("email"),
    );
}

Modules::$locations可以在application/config.php文件中设置,例如:

 "../modules/",
);

Modules::run()输出将会被缓存,因此从任何从控制器返回或者输出的数据将会被捕获并且返回到调用者。特别的,$this->load->view()能够在一个普通的控制器中按照你所想的那样使用,而不用返回任何值。

控制器能够作为别的控制器的类变量载入,使用语句$this->load->module("module/controller");或者在控制器的名称和模块的名称一致的时候,使用$this->load->module("module");

任何加载的模块都可以当做一个类库使用,例如$this->controller->method(),但是加载的模块拥有自己独立与调用它的类的模块和类库。

所有模块控制器都能够通过URL( module/controller/method或者模块名和控制器名称一致的时候使用module/method)访问到。如果你添加了_remap()方法到你的控制器中,你能够阻止不需要的访问然后重定向或者发送一个错误,这些随你。

注意:

要使用HMVC功能,例如Modules::run(),控制器必须继承MX_Controller类。

仅仅使用分开的模块而不是HMVC功能,控制器可以继承CodeIgniter类。

你必须在控制器中使用PHP5样式的构造函数,例如:


构造函数并不是必须的,除非你想在控制器创建的时候载入或者处理什么东西。

所有的MY_extension类库应该包含(需要)他们同等的MX类库文件,并且继承它们同等的MX_class

每一个模块可以包含一个config/routes.php文件,在文件中定义该模块的路由和默认控制器:


控制器可以从application/controllers子目录中载入。

控制器也可以从module/controllers子目录中载入。

资源能够能够跨控制器载入,例如: $this->load->model("module/model");

Modules::run()被设计成返回部分视图,并且它将会从控制器返回缓存输出(一个视图)。使用modules::run语法是一个URI类型的片段字符串和无限的变量。


在控制器里边调用一个模块控制器,你可以使用$this->load->module()或者Modules::load(),PHP5的方法链也可以用在任何被MX加载的对象中,例如: $this->load->library(‘validation’)->run()

载入模块的语言文件推荐使用载入方法,该方法将会传递一个激活的模块名称到一个语言实例,例如:$this->load->language("language_file");

PHP5的spl_autoload特性允许你自由地扩展你的控制器、模块和来自application/core或者application/libraries基本类的的类库,不需要考虑显式包含他们。

类库加载器也被更新从而适应一些CI的特性,例如:类库别名能够和模块别名一样的方式接受,并且从模块配置目录中载入配置文件作为类库的参数(例如:form_validation.php),这项特性也被加了进来。

$config = $this->load->config(‘config_file’),返回已加载的数组到变量中。

模块和类库也能够从他们各自的应用目录的子目录中加载。

在用MX使用表单验证时,你将需要继承CI_Form_validation类,如下所示:


在将目前的控制器作为$CI变量赋值给表单验证类库之前。这将让你的回调函数正常工作。

load->library("form_validation");
        $this->form_validation->CI =& $this;
    }
}
部分视图

使用模块作为视图的一部分在一个视图中使用是很容易的:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21264.html

相关文章

  • 】PHP:40+开发工具推荐

    摘要:今天,就为开发者介绍个方便的工具。对开发者来说,是一个非常有用的工具,它提供了超过个有用的函数。该工具检查输入源代码和报告任何违反给定的标准。框架是一个开发的工具。它侧重于安全性和性能,绝对是最安全的开发框架之一。 PHP是为Web开发设计的服务器脚本语言,但也是一种通用的编程语言。超过2.4亿个索引域使用PHP,包括很多重要的网站,例如Facebook、Digg和WordPress。...

    dreambei 评论0 收藏0
  • 你不可不知道的20个优秀PHP框架

    摘要:每一个开发者都知道,拥有一个强大的框架可以让开发工作变得更加快捷安全和有效。官方网站是一款老牌的框架,现在稳定版本已经是了。官方网站是由最大的社区之一的管理开发的,也是一个开源的框架。 对于Web开发者来说,PHP是一款非常强大而又受欢迎的编程语言。世界上很多顶级的网站都是基于PHP开发的。 每一个开发者都知道,拥有一个强大的框架可以让开发工作变得更加快捷、安全和有效。在开发项目之前选...

    zombieda 评论0 收藏0
  • CodeIgniter连接到微软SQLSERVER2012数据库

    摘要:版本版本版本修改下的修改下的修改下的修改下的,为私有,不能作为表名方法不能刷新主键,否则会报错方法的模型,面向对象的链式写法是,模块为勾选,为勾选域名虚拟主机配置,添加到的最后打开激活在配置对应好版本为文档添加微软的连接插件安装扩 1,PHP PHP版本5.3.3 Apache版本 2.1.5 MSSQL版本 2012 修改database.php下的$db[default][dbd...

    darry 评论0 收藏0
  • CodeIgniter笔记

    摘要:移除中的开启的模块,在项目目录中新建文件,添加如下内容获取超级对象使用辅助函数一般情况下,辅助函数位于或者目录目录下。模型命名规则类名的第一个字母必须大写,其余部分小写。文件名和类名应该一致。 移除URL中的index.php 开启Apache的mod_rewrite模块,在项目目录中新建.htaccess 文件,添加如下内容 RewriteEngine On RewriteCond ...

    Michael_Lin 评论0 收藏0
  • Codeigniter 4.0-dev 版源码学习笔记之一——前言以及 CI 4 预览

    摘要:版权声明可转载,但不论任何媒体都需要在转载前与本人沟通,并在转载时注明出处。的各个核心模块以模块名为目录名分别存储在这个目录下。下一篇文章会涉及到和。此文可以转载,但转载前需要发邮件到进行沟通,未沟通的均视作侵权。 写在前面: 为什么选择开发过程中的 CI 4 作为源码解读版本:(1)首先我选 CI 是因为它之前的稳定版都是相对比较轻量小巧的,而且可以认为是简单的。(2)为什么没有选...

    MSchumi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<