thinkphp6
1、index.php单入口文件中,载入composer的autoload文件
2、实例化thinkApp,获取项目基础路径
3.加载全局的服务提供:provider文件
4、设置容器示例以及应用对象实例,保证当前容器对象唯一
5、从容器获取http 应用类thinkhttp;($http = (new App())->http;)
6、执行http应用 run方法启动一个http应用 ($response = $http->run();)
7、获取当前请求对象实例保存到容器(appRequest继承thinkRequest)
8、执行thinkApp类的初始化方法initialize
9、加载.env和全局初始化文件
10、加载全局公共文件、系统助手函数、全局配置文件、全局事件定义和全局服务定义
11、判断应用模式(调试或者部署模式)
12、监听AppInit事件
13.注册异常处理
14.服务注册
15.启动注册的服务
16.加载全局中间件定义
17.监听HttpRun事件
18.执行全局中间件
19.执行路由调度(Route类dispatch方法)
20.如果开启路由则检查路由缓存
21.加载路由定义
22.监听RouteLoaded事件
23.如果开启注解路由则检测注解路由
24.路由检测(中间流程很复杂 略)
25.路由调度对象think
outeDispatch初始化
26.设置当前请求的控制器和操作名
27.注册路由中间件
28.绑定数据模型
29.设置路由额外参数
30.执行数据自动验证
31.执行路由调度子类的exec方法返回响应thinkResponse对象
32.获取当前请求的控制器对象实例
33.利用反射机制注册控制器中间件
34.执行控制器方法以及前后置中间件
35.执行当前响应对象的send方法输出($response->send();)
36.执行HTTP应用对象的end方法善后($http->end($response);)
37.监听HttpEnd事件
38.执行中间件的end回调
39.写入当前请求的日志信息
简单方式为:创建应用App对象,在这里获取一些初始化目录;创建http应用,接着加载环境变量、助手函数文件、事件、服务配置加载;服务注册,在全局初始化完成之后执行加载所需要的服务类;创建,注册触发事件监听;定义加载执行中间件;路由解析;控制器;输出响应。