YII Framework学习教程-YII的Modules(模块化)
一个相对来说大的项目。如果按照yii生成的webapp进行开发。所有的controller放到controllers文件夹下,所有的model放到models文件夹下面,如果你有n多个controller和n多的model,是不是就显得这种组织结构过于繁琐,冗余了。还好YII支持Modules结构。你的项目可以分成n多的Module,然后每一个Module有自己的controllers和models。这样的组织结构,无论是开发,管理都方便简洁多了。看看YII的Modules的是组织方式和使用方法。
1.用yiic创建module
在 《
YII Framework学习教程-用YIIC快速创建YII应用之三-2011-11-11
》,已经讲了如何用yiic给制定的应用创建一个模块。
在shell模式下,输入 module 模块名称 。
2.module的目录结构
- │ ├── models
- │ │ ├── ContactForm.php
- │ │ ├── LoginForm.php
- │ │ └── User.php................................................................
- │ ├── modules模块的存放目录
- │ │ └── testmod一个模块,模块的名字对应是目录的名字,唯一。也是路由中的moduleid
- │ │ ├── components模块用到的组件
- │ │ ├── controllers包含控制器
- │ │ │ └── DefaultController.php默认控制器
- │ │ ├── messages国际化
- │ │ ├── models模型类文件
- │ │ ├── TestmodModule.php模块的类文件
- │ │ └── views试图文件
- │ │ ├── default默认视图
- │ │ │ ├── index.php视图文件
- │ │ └── layouts包含布局文件
- │ ├── runtime....................................................................
- │ │ └── application.log
- │ ├── tests
- │ │ ├── bootstrap.php
- │ │ ├── fixtures
- │ │ │ └── tbl_user.php
基本的目录结构如上,当然你可以在自己加入一些自定义的东西。
3.模块的类文件(例如:TestmodModule.php)
- <?php
- class TestmodModule extends CWebModule
- {
- public function init()
- {
- // this method is called when the module is being created
- // you may place code here to customize the module or the application
- // import the module-level models and components
- $this->setImport(array(
- 'testmod.models.*',
- 'testmod.components.*',
- ));
- }
- public function beforeControllerAction($controller, $action)
- {
- if(parent::beforeControllerAction($controller, $action))
- {
- // this method is called before any module controller action is performed
- // you may place customized code here
- return true;
- }
- else
- return false;
- }
- }
模块必须继承CWebModule(->CModule->CComponent)。类名是模块名首字母大写,后缀是Module。
init()
初始化模块,通过代码可以看到,可以用来导入其他模块的组件。主要完成模块的初始工作
beforeControllerAction()
afterControllerAction()
用于在模块内的Controller,Action执行之前和执行之后进行相关的操作
4.模块的配置,使用方法
(1).配置文件/yii_dev/testwebap/protected/config/main.php
'modules'=>array('testmod',),
配置文件中也可以及添加对模块中属性初始化的参数例如:
'modules'=>array('testmod'=>array('param'=>'param1'),
- <?php
- class TestmodModule extends CWebModule
- {
- public $param;
对应的访问方式是:
Yii::app()->controller->module->param;
(2).YII中的模块是非常灵活的,一个模块可以包含子模块。理论上,模块可以是无限嵌套。
5.模块的路由
在yii的路由章节已经说明了模块的路由格式。这里不再累述。
http://blog.csdn.net/mengxiangbaidu/article/details/7041296