在php领域,有许多优秀的框架可供我们程序开发者使用。比如thinkphp、laravel、Phalcon、YII,codeignter等框架,都是非常优秀的php框架。其中有一款非常优秀的由国内开发人员维护和开发的框架备受欢迎。没错,这款框架就是thinkphp。由于篇幅有限,这里就不列出其所有的功能特性了。本章节我们来说明一下它的请求流程。
通常来说,对于一个HTTP应用来说,从用户发起请求到响应输出结束,大致的标准请求流程如下:
1 载入Composer的自动加载autoload文件
2 实例化系统应用基础类think\App
3 获取应用目录等相关路径信息
4 加载全局的服务提供provider.php文件
5 设置容器实例及应用对象实例,确保当前容器对象唯一
6 从容器中获取HTTP应用类think\Http
7 执行HTTP应用类的run方法启动一个HTTP应用
8 获取当前请求对象实例(默认为 app\Request 继承think\Request)保存到容器
9 执行think\App类的初始化方法initialize
10 加载环境变量文件.env和全局初始化文件
11 加载全局公共文件、系统助手函数、全局配置文件、全局事件定义和全局服务定义
12 判断应用模式(调试或者部署模式)
13 监听AppInit事件
14 注册异常处理
15 服务注册
16 启动注册的服务
17 加载全局中间件定义
18 监听HttpRun事件
19 执行全局中间件
20 执行路由调度(Route类dispatch方法)
21 如果开启路由则检查路由缓存
22 加载路由定义
23 监听RouteLoaded事件
24 如果开启注解路由则检测注解路由
25 路由检测(中间流程很复杂 略)
26 路由调度对象think\route\Dispatch初始化
27 设置当前请求的控制器和操作名
28 注册路由中间件
29 绑定数据模型
30 设置路由额外参数
31 执行数据自动验证
32 执行路由调度子类的exec方法返回响应think\Response对象
33 获取当前请求的控制器对象实例
34 利用反射机制注册控制器中间件
35 执行控制器方法以及前后置中间件
36 执行当前响应对象的send方法输出
37 执行HTTP应用对象的end方法善后
38 监听HttpEnd事件
39 执行中间件的end回调
40 写入当前请求的日志信息
总共有步骤有40大步。至此当前请求流程结束。说简单也简单,说复杂也蛮复杂的。这只是请求的流程,还有更多的特性和功能还未列出,拭目以待吧。