YII的Modules模块化

时间:2023-03-09 04:47:02
YII的Modules模块化

转载来源:

http://blog.****.net/mengxiangbaidu/article/details/7041296

http://blog.****.net/colzer/article/details/8443042

在YII中,程序入口是一个继承CApplication的CWebApplication的应用程序,在一个web请求的整个过程中,控制器,模型和视图都是由Application进行创建和控制。首先我们来看一下CWebApplication的类的继承结构:

YII的Modules模块化

从上面我们可以看到CWebApplication本身也是一个CModue。在YII中,模块之间是一个树形结构。即每一个模块都可以包含多个子模块,每一个子模块可以继续包含子模块.其中APP为树的头节点,如图:

YII的Modules模块化

对于一个具体请求,假设route=A/B/C/D,下面我们讲述一下,APP怎么选择相应的模块和模块中的控制器Controller和动作Action。具体的流程图如下:

YII的Modules模块化

一个相对来说大的项目。如果按照yii生成的webapp进行开发。所有的controller放到controllers文件夹下,所有的model放到models文件夹下面,如果你有n多个controller和n多的model,是不是就显得这种组织结构过于繁琐,冗余了。还好YII支持Modules结构。你的项目可以分成n多的Module,然后每一个Module有自己的controllers和models。这样的组织结构,无论是开发,管理都方便简洁多了。看看YII的Modules的是组织方式和使用方法。

│   ├── 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

模块的类文件:

<?php

class AdminModule extends CWebModule
{
public $defaultController = 'default';
public $assetsUrl; //样式目录
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(
'application.extensions.*',
'admin.models.*',
'admin.components.*',
)); //这里是用来区分前后台的session,为用户名session添加了一个admin
Yii::app()->setComponents(array(
'user' => array(
'stateKeyPrefix' => 'admin',
'loginUrl'=>Yii::app()->createUrl('/admin/default/login'),
),
'errorHandler'=>array(
// use 'site/error' action to display errors
'errorAction'=>'/admin/default/error',
),
)
);
//设定跳转url
Yii::app()->user->setReturnUrl(Yii::app()->createUrl('admin')); //发布样式资源
$this->assetsUrl = Yii::app()->getAssetManager()->publish(Yii::getPathOfAlias('application.modules.admin.assets'));
} 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;
} }

config配置:

'modules'=>array(
// uncomment the following to enable the Gii tool 'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'Enter Your Password Here',
// If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
), 'admin'=>array(
'class' => 'application.modules.admin.AdminModule'
) ),

通过gii配置:

YII的Modules模块化

新加模块访问地址为:http://website/index.php?r=admin