yii 模块.php文件,YII中模块化modules的使用

一个相对来说大的项目。如果按照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这个文件里面的内容如下:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值