一个模块是一个自我包含的软件单元,它由模型,视图,控制器和另外组件组成。在很多方面,一个模块类似于一个应用。主要的不同是一个模块不能单独部署,它必须位于一个应用的内部。用户可以访问一个模块中的控制器,就像访问一个普通的应用的控制器。
模块在一些情况下是有用的。对于一个大型应用,我们可以将它分离为几个模块。每个被单独的开发和维护。一些常用的特征,例如用户管理,评论管理,可以以模块的方式开发以便它们在未来的项目容易的重用。
创建模块
一个模块被组织为一个和它ID名字相同的目录。模块目录的结构类似于应用的目录。下面展示一个名为forum的典型目录结构:
02 | ForumModule.phpthemodule class file |
03 | components/containingreusableusercomponents |
04 | views/containingviewfiles for widgets |
05 | controllers/containingcontroller class files |
06 | DefaultController.phpthe default controller class file |
07 | extensions/containingthird-partyextensions |
08 | models/containingmodel class files |
09 | views/containingcontrollerview and layoutfiles |
10 | layouts/containinglayoutviewfiles |
11 | default /containingviewfiles for DefaultController |
12 | index.phptheindexviewfile |
一个模块必须有一个扩展自CWebModule的模块类。类的名字是表达式ucfirst($id).’Module’,$id是模块ID(或模块目录名)。模块类是在模块代码中存储信息以及分享的核心。例如,我们可以使用CWebModule::params来存储模块参数,使用CWebModule::components在模块级分享应用组件。
提示:我们可以使用yiic工具来创建一个新模块的框架。例如,要创建上面的forum模块,我们可以在命令行窗口中执行下面的命令:
模块实例可以通过当前活动控制器的module属性来访问。通过模块实例,我们可以访问在模块级分享的信息。例如,为了访问上面的postPerPage信息,我们可以使用下面的表达式:
一个模块中的控制器动作可以使用路由moduleID/controllerID/actionID来访问。例如,假设上面的forum模块有一个名为PostController的控制器,我们可以使用路由forum/post/create来指向此控制器的create动作。相应的路由的URL是