- 流程图
- 入口文件->public/index.php
- 定义项目路径
- 加载框架引导文件
- 定义项目路径
- 引导文件->start.php,该文件就是系统默认的一个引导文件
- 加载系统常量定义
- 加载环境变量定义文件
- 注册自动加载机制
- 注册错误和异常处理机制
- 加载惯例配置文件
- 执行应用
- 注册自动加载->系统会调用Loader::register()方法注册自动加载,所有符合规范的类库(包括composer依赖加载的第三方类库)都将自动加载
- 系统的自动加载主要为
- 注册系统的自动加载方法 \think\Loader::autoload
- 注册系统命名空间定义
- 加载类库映射文件(如果文件存在)
- 如果存在Composer安装,则注册Composer自动加载
- 注册extend扩展目录
- 一个类库的自动加载检测顺序为
- 是否定义类库映射<最高效>
- RSR-4自动加载检测
- PSR-0自动加载检测
- 系统的自动加载主要为
注册错误和异常机制->执行Error::register()注册错误和异常处理机制
- 应用关闭方法 think\Error::appShutdown
- 错误处理方法 think\Error::appError
- 异常处理方法 think\Error::appException
// 在整个应用请求的生命周期过程中,如果抛出了异常或者严重错误,均会导致应用提前结束,并相应输出异常和错误信息set_error_handler([__CLASS__, 'appError']);set_exception_handler([__CLASS__, 'appException']);register_shutdown_function([__CLASS__, 'appShutdown']);
应用初始化
- 加载应用(公共)配置
- 加载扩展配置文件(由extra_config_list定义)
- 加载应用状态配置
- 加载别名定义
- 加载行为定义
- 加载公共(函数)文件
- 注册应用命名空间
- 加载扩展函数文件(由extra_file_list定义)
- 设置默认时区
- 加载系统语言包
- url访问检测->应用初始化完成后,就会进行url的访问检测,包括PATH_INFO检测和URL后缀检测,5.0url访问必须是PATH_INFO方式的url地址。如:http://serverName/index.php/index/index/hello/val/value
- 路由检测->如果开启了url_route_on参数,会首先进行url的路由检测,5.0路由地址支持方式
- 路由到模块/控制器/操作
- 路由到外部重定向地址
- 路由到控制器方法
- 路由到闭包函数
- 路由到类的方法
- 分发请求->在完成url检测和路由检测之后,路由器会分发请求到对应的路由地址。系统支持的分发请求机制为:
- 模块/控制器/操作
- 控制器方法
- 外部重定向
- 闭包函数
- 类的方法
- 相应输出->控制器的所有操作方法都是return返回而不是输出的,系统会调用Respone::send方法将最终的应用返回的数据输出到页面或者客户端。
- 应用结束->事实上,在应用的数据响应输出之后,应用并没有真正的结束,系统会在应用输出或者中断后进行日志保存写入操作。

