您的位置:首页 > 编程语言 > PHP开发

Yii framework 创建和使用模块(module)方法[转]

2011-11-21 10:16 225 查看

注意:对于模块的支持从版本1.0.3开始。


一个模块是一个自我包含的软件单元,它由模型,视图,控制器和另外组件组成。在很多方面,一个模块类似于一个应用。主要的不同是一个模块不能单独部署,它必须位于一个应用的内部。用户可以访问一个模块中的控制器,就像访问一个普通的应用的控制器。

模块在一些情况下是有用的。对于一个大型应用,我们可以将它分离为几个模块。每个被单独的开发和维护。一些常用的特征,例如用户管理,评论管理,可以以模块的方式开发以便它们在未来的项目容易的重用。

创建模块

一个模块被组织为一个和它ID名字相同的目录。模块目录的结构类似于应用的目录。下面展示一个名为forum的典型目录结构:

01
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模块,我们可以在命令行窗口中执行下面的命令:



1
%cdWebRoot/testdrive
2
%
protected
/yiicshell
3
YiiInteractiveToolv1.0
4
Pleasetype’help’
for
help.Type’
exit
’toquit.
5
>>moduleforum

使用模块

要使用一个模块,首先放置模块目录到应用基本目录下。然后在应用的modules属性中声明模块ID。例如,为了使用上面的forum模块,我们可使用下面的应用配置:

1
return
array
(
2
......
3
'modules'
=>
array
(
'forum'
,...),
4
......
5
);
一个模块也可以使用初始值来配置。其用法非常类似于配置应用组件。例如,模块forum在它的模块类中可以有一个属性postPerPage,在应用配置中可以如下配置:

1
return
array
(
2
......
3
’modules’=>
array
(
4
’forum’=>
array
(
5
’postPerPage’=>20,
6
),
7
),
8
......
9
);
模块实例可以通过当前活动控制器的module属性来访问。通过模块实例,我们可以访问在模块级分享的信息。例如,为了访问上面的postPerPage信息,我们可以使用下面的表达式:

1
$postPerPage
=Yii::app()->controller->module->postPerPage;
2
//orthefollowingif$thisreferstothecontrollerinstance
3
//$postPerPage=$this->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。


嵌套模块

模块可以嵌套,一个模块可以包含另外的模块。我们称前者为parentmodule(父模块)后者为childmodule(子模块)。子模块必须放置在父模块的modules目录下。要访问一个子模块中的控制器动作,我们应当使用路由parentModuleID/childModuleID/controllerID/actionID。

原文http://www.yiiframework.com/doc/guide/basics.module翻译http://dreamneverfall.cn/yiidoc/basics.module.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐
章节导航