YII Framework学习教程-YII的Modules(模块化)
2013-04-19 15:17
441 查看
一个相对来说大的项目。如果按照yii生成的webapp进行开发。所有的controller放到controllers文件夹下,所有的model放到models文件夹下面,如果你有n多个controller和n多的model,是不是就显得这种组织结构过于繁琐,冗余了。还好YII支持Modules结构。你的项目可以分成n多的Module,然后每一个Module有自己的controllers和models。这样的组织结构,无论是开发,管理都方便简洁多了。看看YII的Modules的是组织方式和使用方法。
1.用yiic创建module
在 《
》,已经讲了如何用yiic给制定的应用创建一个模块。
在shell模式下,输入module 模块名称 。
2.module的目录结构
[php] view
plaincopy
│ ├── 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] view
plaincopy
<?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] view
plaincopy
<?php
class TestmodModule extends CWebModule
{
public $param;
对应的访问方式是:
Yii::app()->controller->module->param;
(2).YII中的模块是非常灵活的,一个模块可以包含子模块。理论上,模块可以是无限嵌套。
5.模块的路由
在yii的路由章节已经说明了模块的路由格式。这里不再累述
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
我们对主配置文件 : protected/config/main.php进行配置,如下的代码需要被修改,添加了'admin', :
保存上面的修改后后,我们的新admin模块已经可以使用了。我们可以先通过以下地址访问一下index.php?r=admin/default/index
我们访问index.php?r=admin/default/index会发现,模块使用了你的应用下的/protected/views/layouts/main.php文件,而我们可能希望使用/protected/modules/admin/views/layouts/main.php文件,让admin模块拥有独立的布局视图。
我们在protected\modules\admin\controllers\DefaultController.php添加如下代码,
?
我们把从/protected/views/layouts/main.php 拷贝到/protected/modules/admin/views/layouts/,稍作修改,这样模块就拥有了独立的布局视图.
添加新的模块时,一般会包含图像文件,CSS文件,JavaScript文件等。
模块可以直接从网站主目录中引用。但是如果想要创建一个模块能够在任何地方引用,并且能够避免命名冲突,就要用到assets了。
过程是(这里模块名是admin):
1、把需要用到的资源放在modules/admin/assets下。
2、然后通过 CAssetManager,Yii::app()->assetManager能够自动的将私有资源publish到公共目录下 网站目录/assets
3、Yii会自动在网站目录的/assets下创建一个随机不冲突的文件夹,如2b31b42b,并把你的modules/admin/assets目录下的文件拷贝过去。
例如我的模块是Admin,文件路径通过如下代码获得,修改protected\modules\admin\AdminModule.php文件,
然后,在/protected/modules/admin/views/layouts/main.php中
使用$this->module->assetsUrl就可以调用你的css等文件了。
代码如下,
?
4,通过如上操作,该模块只要把admin目录拷贝,就可以多次复用了。
1.用yiic创建module
在 《
YII Framework学习教程-用YIIC快速创建YII应用之三-2011-11-11
》,已经讲了如何用yiic给制定的应用创建一个模块。在shell模式下,输入module 模块名称 。
2.module的目录结构
[php] view
plaincopy
│ ├── 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] view
plaincopy
<?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] view
plaincopy
<?php
class TestmodModule extends CWebModule
{
public $param;
对应的访问方式是:
Yii::app()->controller->module->param;
(2).YII中的模块是非常灵活的,一个模块可以包含子模块。理论上,模块可以是无限嵌套。
5.模块的路由
在yii的路由章节已经说明了模块的路由格式。这里不再累述
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
配置使用这个模块
我们对主配置文件 : protected/config/main.php进行配置,如下的代码需要被修改,添加了'admin', :'modules'=>array( 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'你的密码', ), 'admin', ),
保存上面的修改后后,我们的新admin模块已经可以使用了。我们可以先通过以下地址访问一下index.php?r=admin/default/index
在模块中使用layout
我们访问index.php?r=admin/default/index会发现,模块使用了你的应用下的/protected/views/layouts/main.php文件,而我们可能希望使用/protected/modules/admin/views/layouts/main.php文件,让admin模块拥有独立的布局视图。我们在protected\modules\admin\controllers\DefaultController.php添加如下代码,
?
在模块中使用Assets
添加新的模块时,一般会包含图像文件,CSS文件,JavaScript文件等。模块可以直接从网站主目录中引用。但是如果想要创建一个模块能够在任何地方引用,并且能够避免命名冲突,就要用到assets了。
过程是(这里模块名是admin):
1、把需要用到的资源放在modules/admin/assets下。
2、然后通过 CAssetManager,Yii::app()->assetManager能够自动的将私有资源publish到公共目录下 网站目录/assets
3、Yii会自动在网站目录的/assets下创建一个随机不冲突的文件夹,如2b31b42b,并把你的modules/admin/assets目录下的文件拷贝过去。
例如我的模块是Admin,文件路径通过如下代码获得,修改protected\modules\admin\AdminModule.php文件,
class AdminModule extends CWebModule { /*开始*/ private$_assetsUrl; publicfunction getAssetsUrl() { if($this->_assetsUrl===null) $this->_assetsUrl=Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets')); return$this->_assetsUrl; } publicfunction setAssetsUrl($value) { $this->_assetsUrl=$value; } /*结束*/ }
然后,在/protected/modules/admin/views/layouts/main.php中
使用$this->module->assetsUrl就可以调用你的css等文件了。
代码如下,
?
相关文章推荐
- YII Framework学习教程-YII的Modules(模块化)
- YII Framework学习教程-YII的Modules(模块化)
- YII Framework学习教程-YII的缓存-使用
- YII Framework学习教程-YII的V-view的render若干函数-2011-11-17
- YII Framework学习教程-用YIIC快速创建YII应用之三
- YII Framework学习教程-YII的V-view的layout
- YII Framework学习教程-YII的Model-Action和Models-2011-11-23
- YII Framework学习教程-YII的异常处理
- YII Framework学习教程-YII的Model-数据库操作4-Query Builder使用举例
- YII Framework学习教程-YII的安全
- YII Framework学习教程-YII的Model-数据库操作3-自定义的DAO操作
- YII Framework学习教程-YII的filter过滤器-2011-11-21
- YII Framework学习教程-YII的分页CPagination-2011-11-23
- YII Framework学习教程-YII的V-view的form-view script-2011-11-23
- YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间-2011-11-22
- YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间
- YII Framework学习教程-YII目录结构-2011-11-11
- YII Framework学习教程-YII的路由-2011-11-21
- YII Framework学习教程-YII的路由
- YII Framework学习教程-用YIIC快速创建YII应用之二-2011-11-11