PHP完全自学手册(珍藏版) 中文pdf扫描版下载
一个相对来说大的项目。如果按照yii生成的webapp进行开发。所有的controller放到controllers文件夹下,所有的model放到models文件夹下面,如果你有n多个controller和n多的model,是不是就显得这种组织结构过于繁琐,冗余了。还好YII支持Modules结构。你的项目可以分成n多的Module,然后每一个Module有自己的controllers和models,其实这种结构叫做HMVC。这样的组织结构,无论是开发,管理都方便简洁多了。看看YII的Modules的是组织方式和使用方法。module是对相同业务逻辑的app中的内容模块化,比如博客前台系统可以模块化成blog,博客后台系统可以模块化成admin,模块化便于对应用的管理扩展。
我们可以手动创建一个modules,也可以使用yiic命令行来创建。建议还是 用手工来创建吧,这样子自己对整个目录结构都更加清晰和了解了。建好的目录结构如下:
│ ├── models │ │ ├── ContactForm.php │ │ ├── LoginForm.php │ │ └── User.php................................................................ │ ├── modules模块的存放目录 │ │ └── timeline一个模块,模块的名字对应是目录的名字,唯一。也是路由中的moduleid │ │ ├── components模块用到的组件 │ │ ├── controllers包含控制器 │ │ │ └── DefaultController.php默认控制器 │ │ ├── messages国际化 │ │ ├── models模型类文件 │ │ ├── TimelineModule.php模块的类文件 │ │ └── views试图文件 │ │ ├── default默认视图 │ │ │ ├── index.php视图文件 │ │ └── layouts包含布局文件 | | │ ├── main.php布局文件 │ ├── runtime.................................................................... │ │ └── application.log │ ├── tests │ │ ├── bootstrap.php │ │ ├── fixtures │ │ │ └── tbl_user.php
上面我建立了一个名字叫timeline的模块。
要使用模块功能,我们需要在模块里面创建一个模块的类文件,即上面的TimelineModule.php这个文件里面的内容如下:
<?php class TimelineModule extends CWebModule { // 这个方法是在此模块被创建的时候调用的,我们可以在这里做一些自定义的事情 public function init() { // 导入模块下面的模型文件和组件文件 $this->setImport(array( 'timeline.models.*', 'timeline.components.*', )); } //这个方法实在所有模块控制器被执行之前调用的。 public function beforeControllerAction($controller, $action) { if(parent::beforeControllerAction($controller, $action)) { return true; }else{ return false; } } }
模块必须继承CWebModule(->CModule->CComponent)。类名是模块名首字母大写,后缀是Module。
init()
初始化模块,通过代码可以看到,可以用来导入其他模块的组件。主要完成模块的初始工作
beforeControllerAction()
afterControllerAction()
用于在模块内的Controller,Action执行之前和执行之后进行相关的操作
模块的配置,使用方法
(1).配置文件/yii/webapp/protected/config/main.php
‘modules’=>array(‘timeline’,),
配置文件中也可以及添加对模块中属性初始化的参数例如:
‘modules’=>array(‘timeline’=>array(‘param’=>’param1′),
对应的访问方式是:
Yii::app()->controller->module->param;
(2).要想禁用一个模块,很简单:
‘modules’=>array(‘timeline’=>array(‘enabled’=>’false’),即可。
(3).YII中的模块是非常灵活的,一个模块可以包含子模块。理论上,模块可以是无限嵌套。
模块中的控制器:
模块中的控制器和外边的控制器一样,都是需要继承CController的,其他的和外边一样,
布局:
模块中过的布局可以使用自己模块中的布局文件来进行,
模块的布局文件存放在modules/modulesName/views/layouts/xxx.php,
要使用某个布局文件只要是控制器中定义$layout的值就可以了。
class DefaultController extends Controller{ public $layout = 'test';//使用布局 public function actionIndex(){ $this->render('test'); } }
他的视图文件同样的是存放在modules/modulesName/views/ControllerName/xxx.php中。
访问该模块控制器的方式:
1:http://xxx.xxx.com/webapp/timeline/default/index
2:http://xxx.xxx.com/webapp/index.php?r=/timeline/default/index
转载请注明:谷谷点程序 » YII中模块化modules的使用