1.4.执行流程

执行流程


应用初始化->preHandle->路由解析->控制器执行->postHandle->视图渲染/输出->afterCompletion->应用结束

路由解析->控制器适配器->执行控制器(返回MV模型和视图)->视图解析

//↓→←↑↗↙↖↘

webapp应用初始化流程

//#创建应用实例
$app=new \qing\app\WebApp($configFile);
//#执行应用,解析http请求
$app->run();

1.创建应用实例流程

入口文件index.php
    ↓ 配置文件
实例化WebApp/new WebApp($configFile)
    ↓ 配置文件
App构造函数/App::__construct($configFile)
    ↓
WebApp实例赋值到Qing::$app静态属性/每次请求只能实例化一个webapp
    ↓
初始化框架环境/require_once init.php
    ↓
加载框架函数库/require_once _function/function.php
    ↓ $configFile
配置文件解析/环境配置解析
    ↓
初始化组件系统
    ↓
注入多余的应用属性
    ↓
应用实例创建完成

2.解析http请求流程

执行run方法
    ↓
初始化URL全局常量/__APP__/__ROOT__等
    ↓ sessionOn
是否自动开启session
    ↓
preHandle/拦截器前置处理→ →(false)→ →应用结束/执行终止!
    ↓ true
路由解析→ → false → → 应用结束/执行终止!抛出404异常     
    ↓ RouteBag/解析成功
beforeMainModule-主模块前置处理→ →(false)→ →应用结束/执行终止!
    ↓ true
    ↓ RouteBag
创建当前模块实例
    ↓   
beforeModule/模块前置处理→ →(false)→ →应用结束/执行终止!
    ↓ true
执行控制器
    ↓ mv
afterModule/模块后处理
    ↓
postHandle/拦截器控制器后处理
    ↓ mv
视图解析
    ↓
输出响应
    ↓
afterCompletion/拦截器完成处理
    ↓
应用结束

路由解析流程

   开始
    ↓ $parsers
执行路由解析器链
    ↓ $parser
执行一个路由解析器← ← ← ↑
    ↓                   ↑ 还有解析器
    ↓ → →(false)→ →执行下一个解析器→ →(最后一个解析器)→ →返回false→ →路由解析完成/路由解析失败!
    ↓ → →(INDEX)→ →路由解析完成/返回默认路由!
    ↓ 
    ↓ $routeBag
解析成功    
    ↓
路由安全验证→ →(false)→ →抛出非法路由异常!
    ↓
路由解析完成

控制器执行流程

1.简单模型

路由解析
    ↓ 路由包
控制器适配器
    ↓
执行控制器
    ↓ 返回MV模型和视图
视图解析

2.详细模型

路由解析
    ↓
路由安全验证
    ↓ 路由包
控制器适配器初始化
    ↓
控制器安全验证
    ↓
beforeAction/前控制器操作→ →(false)→ →应用结束/执行终止!
    ↓ true
执行控制器操作
    ↓
afterAction/后控制器操作
    ↓ 返回ModelAndView
ModelAndView解析/视图定位
    ↓
视图解析

视图解析流程

CachedView解析流程

执行控制器操作
    ↓ 返回ModelAndView
ModelAndView解析/视图定位
    ↓
检测模版缓存是否有效 → 调用模版编译引擎编译
    ↓ 有效                        ↓
视图解析/释放mv携带的数据  ←  ←