YII解析:Module模块使用

模块结构

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

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


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

整个过程包括两个部分:选择模块和选择模块中的控制器。整个过程如下:
  1. 初始化情况下:module为YII::APP,route=a/b/c/d,id=null。
  2. 在module=YII::APP情况下,此时id=a,route=b/c/d。
    1. 如果id=a为当前module下控制器,此时,module,controller,action和$_GET都确定。
    2. 如果id=a确定不是当前module下的控制器,
      1. 在当前module下面找到了id=a的子模块,此时就更新模块为module=YII::APP/a,并且循环上面过程。
      2. 在当期module下面没有找到id=a的子模块,此时module不改变,并且在后面的过程中,模块也不会再改变。此时id=a指的当前模块下的目标控制器Controller的命名空间,即controller Namespace=a。
  3. 后面过程主要是更新当前模块下的目标控制器Controller的命名空间。

描述的不是很清楚,但是上面流程图还是很清晰的吧。

对于读过YII源码都直到,任何一个web请求都是通过CApplication::Run()函数开始,进入到CWebApplication::processRequest()。源码分别如下:

//CApplication

public function run()
{
	if($this->hasEventHandler('onBeginRequest'))
		$this->onBeginRequest(new CEvent($this));
	$this->processRequest();//===========
	if($this->hasEventHandler('onEndRequest')
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值