YII运行原理

应用执行流程:

浏览器向服务器发送 Http Request | 控制器(protected/controllers) | |—> Action | 创建模型 (Model) | 检查$_POST输入 | 渲染视图 | render()第二个参数作为控制器与视图接口参数 | |—-> View (protected/views) | 使用$this访问控制器的变量(包括layout, widget)

—————————————————————–

视图渲染流程:

render($view, $data, $return) | beforeRender() | 渲染View文件,调用renderPartial(),要求处理输出结果 | |—-> 根据$view得到viewFile文件名 | renderFile(),要求返回渲染结果,做下一步处理 | |———–> 获取widget的数目 | 从Yii::app()获得render CWebApplication::getViewRenderer 查询component['viewRenderer'],默认没有配置 | Then, 调用renderInternal() | |———> require View文件,渲染,根据需要返回渲染结果 | |<—————| | |<——————-| | 处理输出结果processOutput() | 按照caller参数,返回输出,而不是echo输出 |<————–| | 渲染layout文件 |

———————————————————————-

加载控制器及其方法:

根据route信息,获得当前控制器 | 初始化当前控制器,CController::init(),默认为空 | 执行当前控制器,CController::run() | |—-> 创建action,为空则默认为index | 得到CInlineAction的实例 | 用父对象执行beforeControllerAction:默认是CWebApplication,直接返回TRUE | 执行action |—-> 备份原来的action | 执行beforeAction() | runWithParams()—-> 实际上是执行CInlineAction->runWithParams() | 在实例中,执行SiteController->actionIndex() | 渲染页面:render(‘index’) | |<————————–| | 执行afterAction() | 恢复原来action | |<———-| | 用父对象执行afterControllerAction:默认是CWebApplication,为空 |<————| 完成

—————————————————————-

应用执行流程:

index.php | require_once($yii) | |————->yii.php | require(YiiBase.php) | |—————->YiiBase.php | Define YII_XXX global variable | Define Class YiiBase | Autload Class YiiBase (自动加载类机制) | require interface.php | |<——————| | define null Class Yii | |<————–| | createWebApplication($config)———->| | YiiBase::createApplication(‘CWebApplication’,$config) | Create Instance of CWebApplication | |———>CWebApplication | CApplication($config)构造函数 | |——>| setBasePath | set path alias | preinit() 空方法 | initSystemHandlers() | configure($config) 将配置文件信息保存到Application | attachBehaviors() | preloadComponents() –> 装载在configure($config)中配置需要preload的components | init() | |<——| | |<————| | |<———————————-| | app->run() | |—->CWebApplication::processRequest() | |—-> CWebApplication::runController($route) | |—->createController($route) | 如果$route是空,添加默认controller,对于CWebApplication的controller是”site” | Controller类是SiteController,require该类文件 | 如果该类是CController的子类,修改id[0]为大写,创建该类的实例 | |—->CSiteController | extends from Controller 这是客户化控制器的基本类,存在于components下 定义了页面的通用布局 | 使用CController构造函数创建对象CSiteController,具体初始化数据见yii-1.png | |<——–| 备份$this->_controller $this->_controller = $controller | 调用控制器类的init()方法,默认为空 | 调用控制器类的run()方法,默认为CController的run() | |—->createAction() | if($actionID===”) $actionID设置为$this->default (“index”) | |Yes |—-> return CInlineAction($this, $actionID) |No | 从Map创建 | | 执行当前类CInlineAction的父类CAction的构造函数 | 设置_controller和$id | | |<—————| | | 这里得到一个CAction的实例 | $this->getModule()作为parent,为空则使用Yii::ap | $parent->beforeControllerAction() ?? | $this->runActionWithFilters($action,$this->filters()); | $parent->afterControllerAction($this,$action); |<——–| | 恢复原来的$oldController |<———–| | |<————–| | End of processRequest() | |<—————–| | End of app->run()

转载请注明:PHP学习网 » yii执行原理

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-06-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Aloys的开发之路

Linux快捷键

欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinn...

2253
来自专栏程序员宝库

用Python处理ZIP压缩包

标准库模块zipfile可以用来处理zip压缩包。 测试zip文件 is_zipfile()方法返回一个布尔值,说明参数传入的路径所代表的文件是不是一个zip压...

41312
来自专栏九彩拼盘的叨叨叨

在 Sublime 中使用 Vim 指南

Sublime 中自带支持 Vim 的插件,但默认是关闭的。开启方式为:在菜单 Preferences/Settings-User 中设置

862
来自专栏分布式系统和大数据处理

.Net Remoting(基本操作) - Part.2

接下来我们考虑通常的情况,也就是 客户程序 与 宿主程序 位于不同的进程中的情况。

782
来自专栏我分享我快乐

解决IE不支持HTML5的办法

解决IE不支持HTML5的办法,有3种,如下: 第一种方法(原理:识别标签): 引用Google的html5.js文件到head部分,记住一定要是head部分(...

2979
来自专栏数据之美

shell 学习笔记(16)

转载请注明出处: https://cloud.tencent.com/developer/user/1177713/activities 注:以前的1-15连载...

30810
来自专栏从零开始学自动化测试

Selenium2+python自动化60-异常后截图(screenshot)

前言 在执行用例过程中由于是无人值守的,用例运行报错的时候,我们希望能对当前屏幕截图,留下证据。 在写用例的时候,最后一步是断言,可以把截图的动作放在断言这里,...

3695
来自专栏MasiMaro 的技术博文

PE文件详解(三)

在执行一个PE文件的时候,windows 并不在一开始就将整个文件读入内存的,二十采用与内存映射文件类似的机制。 也就是说,windows 装载器在装载的时...

913
来自专栏乐百川的学习频道

使用 Beautiful Soup 解析网页内容

安装Beautiful Soup Beautiful Soup是一个Python的HTML解析框架,我们可以利用它方便的处理HTML和XML文档。Beautif...

2289
来自专栏高性能服务器开发

libevent源码深度剖析(六) 初见事件处理框架

(1)libevent源码深度剖析一 序 (2)libevent源码深度剖析二 Reactor模式 (3)libevent源码深度剖析三 libevent基...

1742

扫码关注云+社区