内容简介:Yii2框架的启动流程
Yii2虽然是一个以简单著称的框架,但它的启动流程却有点复杂.想要用好这个框架,启动流程必须烂熟于心.尤其当你开发Yii2的扩展(Extension)时,或者将自己已有的扩展运用到Yii2开发的项目中时,你可能会通过composer安装,然后在应用中通过各种手段参与框架的整个流程,这时,了解整个框架的启动流程就很重要.
以下从Yii2框架最核心的六重继承开始介绍,进一步介绍它的构造阶段,最后是框架整个MVC过程run()方法.
0. Yii2中的六重继承
Yii2
的六重继承估计遭受了不只我在内很多人的吐槽.不符合对象的设计标准,单一职责原则首先被无视.其次就是几乎不用接口去限制对象,导致出现了大量的继承和方法重写,导致对象的混乱.大量对原始类的继承,导致全局掌控的欠缺,比如新的对象,都有独立的 DI
和 事件
模块,例如每个 Controller
,虽然 Yii2
对事件管理提供了一个解决方案,实现跨实例干涉,这个我们后续再说.这种缺憾举不胜举.
use yii\web\Application; use yii\base\Application; use yii\base\Module; use yii\di\ServiceLocator; use yii\base\Component; use yii\base\BaseObject;
由上而下,这就是Yii2的六重继承,
0x00. yii\web\Application
这个对象负责掌管web应用组件 request
, response,user
, session
, errorHandler
等的入口.
0x01. yii\base\Application
yii\base\Application
更像是 yii\web\Application
的补充,负责管理 view
, mailer
, userManager
等组件.
0x02. yii\base\Module
可以理解为 yii\base\Module
是用于实现 MVC
的对象, controller
, action
的创建都在这里发生.
0x03. yii\di\ServiceLocator
用于管理 component
的实例管理工具,这个对象在之前的文章中提起过,要实现 component
的单例,如果是运行时动态添加的话,需要先 set()
, Yii2
将一个 component
分为三部分缓存, 参数
, reflection
, 实例本身
,这可能就是单例必须 set()
的原因吧,因为 set()
的就是参数.
0x04. yii\base\Component
这个命名很容易误导初学者,其实这个对象正是 Yii2
的事件管理者.后续将单独开文详细介绍Yii2的事件管理.
0x05. yii\base\BaseObject
这个对象主要用语法糖 __set()
和 __get()
管理上述对象的属性.
1. 构造阶段
//在站点入口``index.php``中 (new yii\web\Application($config))->run();
在 (new yii\web\Application($config))
中,实现了对 Yii2
六重继承对象体的构造,主要包括将 $config
按照规则
配置
入这个对象体中.然后调用
bootstrap()
方法.
在
配置
的过程中, component
会被以此 set()
,并实例化到 ServiceLocator
提供的变量中.在直接尝试通过六重继承实例获取该 component
时, ServiceLocator
提供了新的语法糖用于直接返回这个 component
,就像直接获取这个实例的 public
变量.
在
bootstrap()
时,实例化所有的 extension
,如果被实例化对象引用了 yii\base\BootstrapInterface
,还会尝试调用其 bootstrap()
方法.之后会遍历配置项中的 bootstrap
项,以此实例化,并对引用了 yii\base\BootstrapInterface
的对象尝试调用其 bootstrap()
方法.
2. run()阶段
这个阶段,主要是解析路由,处理请求,渲染页面,以及响应请求的阶段.
0x00. 解析路由
0x01. 实例化controller和action
0x02. 运行action
0x03. 渲染页面
0x04. 相应请求
最后更新于 2018-01-07 12:42:01 并被添加「」标签,已有 1 位童鞋阅读过。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Lararel 框架执行流程详解(1) 入口文件
- 架构设计:基于 SpringCloud 框架模拟灰度发布流程
- 工具 | 一款流程可视化的前端框架
- gojs 流程图框架-编辑类模板(二)
- Linux 网络层收发包流程及 Netfilter 框架浅析
- 基于Spring MVC框架的Http流程分析 原 荐
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Algorithm Design Manual
Steven S Skiena / Springer / 2011-11-14 / GBP 55.07
....The most comprehensive guide to designing practical and efficient algorithms.... Written by a well-known algorithms researcher who received the IEEE Computer Science and Engineering Teaching Aw......一起来看看 《The Algorithm Design Manual》 这本书的介绍吧!
HTML 压缩/解压工具
在线压缩/解压 HTML 代码
JS 压缩/解压工具
在线压缩/解压 JS 代码