26.Yii 模块(2)
模块结构
在YII中,程序入口是一个继承CApplication的CWebApplication的应用程序,在一个web请求的整个过程中,
控制器,模型和视图都是由Application进行创建和控制。首先我们来看一下CWebApplication的类的继承结构:
从上面我们可以看到CWebApplication本身也是一个CModue。在YII中,模块之间是一个树形结构。
即每一个模块都可以包含多个子模块,每一个子模块可以继续包含子模块.其中APP为树的头节点,如图:
对于一个具体请求,假设route=A/B/C/D,下面我们讲述一下,APP怎么选择相应的模块和
模块中的控制器Controller和动作Action。具体的流程图如下:
对于读过YII源码都直到,任何一个web请求都是通过CApplication::Run()函数开始,进入
到CWebApplication::processRequest()。源码分别如下:
程序真正的进行到相应模块,控制器,动作是在函数processRequest的$this->runController($route);中,
该函数传入的参数为$route。何为 $route。其实$route是一个类似A/B/C/D格式的字符串,
该字符串中可能包含了模块,控制器,动作和$_GET相关参数。该函数是也是定义在CWebApplication中。代码如下:
通过该函数的名称字面意思为"运行控制器"。因此首先第一步就是要创建一个控制器,即函数createController($route)。
我们知道控制器的是包含在模块中,因此也在该函数中,通过分析$route可以得到相应的模块,以及模块中的控制器和相应的动作,
即list($controller,$actionID)=$ca;上面的流程图即为该函数createController($route)的函数流程图。
现在应该清楚了一个模块是怎么被web用户所调用了吧。下面我们说一下程序怎么在应用程序中添加模块,
当然可能是通过配置文件。
添加模块
模块源码分析
public function __construct($id,$parent,$config=null)//$id为模块ID,$parent为父模块ID
{ $this->_id=$id; $this->_parentModule=$parent; // set basePath at early as possible to avoid trouble if(is_string($config)) $config=require($config); if(isset($config['basePath'])) { $this->setBasePath($config['basePath']);//设置模块路径 unset($config['basePath']); } Yii::setPathOfAlias($id,$this->getBasePath());//把该模块的路径添加到Alias中,方便访问 //下面几个函数就是模块的初始化需要做的几件事情,可以通过重写preinit()和init()来自定义模块可以通过自定义相应的函数来定制和初始化模块的参数 $this->preinit();//预初始化,一般用来设置模块相关的行为对象$behaviors[],预加载对象$preload[],和其他配置。 $this->configure($config);//加载配置 $this->attachBehaviors($this->behaviors);//挂载行为对象 $this->preloadComponents();//加载CModule::$preload[]中的预加载组件 $this->init();//模块真正初始化,一般情况下,重写该函数完整模块初始化
}
CWebModule分析
public function beforeControllerAction($controller,$action)
{ if(($parent=$this->getParentModule())===null) $parent=Yii::app(); return $parent->beforeControllerAction($controller,$action);
} public function afterControllerAction($controller,$action)
{ if(($parent=$this->getParentModule())===null) $parent=Yii::app(); $parent->afterControllerAction($controller,$action);
}
可以通过此两个函数对该模块中的每一个请求进行一些改写,控制以及收尾的相关工作。在自定义的模块中,
两个函数的覆盖的模版如下: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;
}
array('basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',//模块的路径'preload'=>array('log'),//需要预先加载日志组件'import'=>array('application.models.*', 'application.components.*',),//需要include的路径//组件的配置'components'=>array('user'=>array(//用户组件的配置'allowAutoLogin'=>true),'log'=>array(//日志组件的配置'class'=>'CLogRouter','routes'=>array(array('class'=>'CWebLogRoute','levels'=>'trace, profile')))),//模块的配置'modules'=>array('gii'=>array(//自动生成代码模块的配置'class'=>'system.gii.GiiModule','password'=>'123456'),),);
http://blog.csdn.net/colzer/article/details/8443042
26.Yii 模块(2)相关推荐
- 前端学习(418):京东制作页面26中间模块划分
index.css /* 中间模块 */ .grid{height: 480px;} .grid-coll1{width: 190px;height: 100%;background-color: p ...
- Yii模块内生成CRUD
2019独角兽企业重金招聘Python工程师标准>>> 刚接触Yii框架不太了解其中内容,做一个简单的讲解,以便以后使用. 操作 module 命令生成 module config中 ...
- 鼎新TIPTOP GP5.25鼎捷易拓GP5.25视频教程26模块操作及开发
鼎新TIPTOP GP5.25的视频教程,官方高级顾问主讲,共分为26个模块不仅仅包括了一般企业用到的功能模块的视频教程,还包括了BDL语法基础及TIPTOP GP5.25二次开发基础.系统与EASY ...
- YII与Ace Admin 的集成
目录 一. 前言... 1 二.为什么要使用YII+ace. 1 三.新建YII模块... 1 四.如何修改模板... 3 五.注意的地方... 4 六.整合的不足之处... 4 一. 前言 yii- ...
- 【Scratch-动作模块】碰到边缘就反弹和翻转方式
指令解释 碰到边缘就反弹 旋转方式设为:分为左右翻转.不可旋转.任意旋转(默认旋转方式)三种 对应效果 对应效果 对应效果 视频演示 「零基础学习Scratch3.0」26运动模块碰到边缘和翻转积木 ...
- Python3.x 标准模块库目录(下篇)
Python Standard Library 翻译: Python 江湖群 10/06/07 20:10:08 编译 0.1. 关于本书 0.2. 代码约定 0.3. 关于例子 0.4. 如何联系 ...
- Yii需要php版本,为什么我们要选择yii框架
背景介绍: SitePoint曾发表过一篇文章,着重强调了一些顶级的PHP框架,当时并列排名第四的是Yii(发音Yee)框架,最新版本为1.1.14.最近,Yii发布了2.0版本. (推荐教程:yii ...
- php框架列举,列举PHP的Yii 2框架的开发优势
当 Yii框架仍处于 RC(候选版)阶段时,我们 对它进行过报道,那时它刚刚全面达到候选版本阶段,(现在它已经发布了正式版本)我们感觉是时候再次讨论这个话题:选择 Yii框架的原因. 1. 易于安装 ...
- yii2框架_选择Yii 2框架的7个理由
yii2框架 Late last year, SitePoint published an article highlighting the top PHP frameworks. Tied for ...
- [转]python各模块的学习
[-] 01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 ...
最新文章
- Rocksdb 获取当前db内部的有效key个数 (估值)
- mysql 5.6.15_mysql-5.6.15-win32.zip免安装配置
- mongodb - 前端form表单数据传输,在保存和清除的数据格式的处理程序的 - 非递归...
- android linux应用安装位置,Android中App安装位置详解
- cookie和session 以及Django中应用
- 李伟山:金融撮合架构
- java语法优化小结
- Mac 10.12安装数据库管理工具MySQL Workbench
- 基于SpringMVC国际化资源配置方式Demo
- The following IP can be used to access Google website
- 一个函数搞定无限层级分类
- excel power Query
- ie8兼容性视图灰色修复_兼容性视图_win7兼容性设置选项为灰色
- CSS动画入门:一分钟实现球体上下跳动动画效果
- 【Word】双栏论文尾页文字齐平排版的实现
- python魔方方法
- 图鉴|春节怼亲戚指南(2020版)
- JAVA通过tcp通信劳易测BCL 308i扫码枪获取数据
- java正则贪婪匹配指定字符开头和结尾或括号中内容
- 经典C++笔试题目100例,接近实际,值得一看!