ThinkPHP5架构流程分析(1)

PS:学习笔记

先对ThinkPHP5的应用执行流程做一下大致介绍:整个流程大概分为六个部分

1.入口文件和引导文件

用户发起的请求都会经过应用的入口文件,通常是public/index.php文件,一般入口文件以定义一些常量为主,还包含了引导文件start.php.

start.php文件又会首先调用base.php基础引导文件,然后执行应用并且输出...

base.php文件主要包含:

●定义了一些系统常量

●包含了Loader.php类文件

●加载了环境变量定义文件

●注册自动加载

●注册错误和异常处理机制

●加载惯例配置文件

2.注册自动加载和错误处理机制

系统会调用Loader::register()方法注册自动加载

自动加载主要由下面这些部分组成:

●注册系统的自动加载方法\think\Loader::autoload

●注册命名空间定义,加载类库映射文件

●Composer自动加载支持

●注册extend扩展目录

执行Error::register()注册错误和异常处理机制

由三部分组成:

●错误处理方法:think\Error::appError

●异常处理方法:think\Error::appException

●应用关闭方法:think\Error::appShutdown

3.应用初始化

初始化主要包括:

●加载应用(公共)配置

●加载扩展配置文件(由extra_config_list定义)

●加载应用状态配置

●加载行为定义

●加载公共(函数)文件

●注册应用命名空间

●加载扩展函数文件(由extra_file_list定义)

●设置默认时区

●加载系统语言包

4.路由检测

如果开启了url_route_on参数的话,会首先进行URL的路由检测。

如果一旦检测到匹配的路由,根据定义的路由地址会注册到相应的URL调度。

如果关闭路由或者路由检测无效,则进行默认的模块/控制器/操作的解析

5.分发请求

路由器会分发请求到对应的路由地址,在这里还可以完成应用的业务逻辑及数据返回。

下面是系统支持的分发请求机制,可以根据情况选择:

●模块/控制器/操作

这是默认的分发请求机制,系统会根据URL或者路由地址来判断当前请求的模块、控制器和操作名,并自动调用相应的访问控制器类,执行操作对应的方法。

●控制器方法

和前一种方式类似,只是无需判断模块、控制器和操作,直接分发请求到一个指定的控制器类的方法,因此没有进行模块的初始化操作。

●外部重定向

可以直接分发请求到一个外部的重定向地址,支持指定重定向代码,默认为301重定向。

●闭包函数

路由地址定义的时候可以直接采用闭包函数,完成一些相对简单的逻辑操作和输出。

6.响应输出和应用结束

控制器的所有操作方法都是return返回而不是直接输出,系统会调用Response::send方法将最终的应用返回的数据输出到页面或者客户端。

事实上,在应用的数据响应输出之后,应用并没有真正的结束,系统会在应用输出或者中断后进行日志保存写入操作。

猜你喜欢

转载自blog.csdn.net/qq_28137309/article/details/87352796