注意:对于模块的支持从版本 1.0.3 开始。
一个模块是一个自我包含的软件单元,它由模型,视图,控制器和另外组件组成。在很多方面,一个模块类似于一个应用。主要的不同是一个模块不能单独部署,它必须位于一个应用的内部。用户可以访问一个模块中的控制器,就像访问一个普通的应用的控制器。
模块在一些情况下是有用的。对于一个大型应用,我们可以将它分离为几个模块。每个被单独的开发和维护。一些常用的特征,例如用户管理,评论管理,可以以模块的方式开发以便它们在未来的项目容易的重用。
创建模块
一个模块被组织为一个和它ID名字相同的目录。模块目录的结构类似于应用的目录。下面展示一个名为 forum 的典型目录结构:
02 |
ForumModule.php the module class file |
03 |
components/ containing reusable user components |
04 |
views/ containing view files for widgets |
05 |
controllers/ containing controller class files |
06 |
DefaultController.php the default controller class file |
07 |
extensions/ containing third-party extensions |
08 |
models/ containing model class files |
09 |
views/ containing controller view and layout files |
10 |
layouts/ containing layout view files |
11 |
default / containing view files for DefaultController |
12 |
index.php the index view file |
一个模块必须有一个扩展自 CWebModule的模块类。类的名字是表达式 ucfirst($id).’Module’, $id是模块ID(或模块目录名)。模块类是在模块代码中存储信息以及分享的核心。例如,我们可以使用 CWebModule::params来存储模块参数,使用CWebModule::components在模块级分享应用组件。
提示:我们可以使用 yiic 工具来创建一个新模块的框架。例如,要创建上面的 forum 模块,我们可以在命令行窗口中执行下面的命令:
3 |
Yii Interactive Tool v1.0 |
4 |
Please type ’help’ for help. Type ’ exit ’ to quit. |
使用模块
要使用一个模块,首先放置模块目录到应用基本目录下。然后在应用的 modules 属性中声明模块ID。例如,为了使用上面的 forum 模块,我们可使用下面的应用配置:
3 |
'modules' => array ( 'forum' ,...), |
一个模块也可以使用初始值来配置。其用法非常类似于配置应用组件。例如,模块 forum 在它的模块类中可以有一个属性 postPerPage,在应用配置中可以如下配置:
模块实例可以通过当前活动控制器的module属性来访问。通过模块实例,我们可以访问在模块级分享的信息。例如,为了访问上面的 postPerPage 信息,我们可以使用下面的表达式:
1 |
$postPerPage =Yii::app()->controller->module->postPerPage; |
一个模块中的控制器动作可以使用路由 moduleID/controllerID/actionID 来访问。例如,假设上面的 forum 模块有一个名为 PostController 的控制器,我们可以使用路由 forum/post/create 来指向此控制器的 create 动作。相应的路由的 URL 是 http://www.example.com/index.php?r=forum/post/create。
提示:若一个控制器是一个控制器的子目录,我们仍然可以使用上面的路由格式。例如,假设 PostController 位于 forum/controllers/admin 目录中,我们可以指向 create 动作使用 forum/admin/post/create。
嵌套模块
模块可以嵌套,一个模块可以包含另外的模块。我们称前者为parent module(父模块)后者为child module(子模块)。子模块必须放置在父模块的 modules目录下。要访问一个子模块中的控制器动作,我们应当使用路由parentModuleID/childModuleID/controllerID/actionID。
原文 http://www.yiiframework.com/doc/guide/basics.module 翻译 http://dreamneverfall.cn/yiidoc/basics.module.htm