1. start.php文件
1. 导入base.php文件
2. 执行App:run()->send();函数运行框架;
2. base.php文件
1. 定义全局变量,主要是各文件夹路径的定义,以及环境变量的检查(比如服务器是否是windows)
2. 加载libary\think\loader.php文件,注册自动加载机制,注册异常处理机制。
3. 加载根目录下的环境变量文件(.env),如果存在则配置环境变量(使用putenv()函数)。
4. 加载默认配置文件。
3. 执行App::run()->send()函数
1. 调用Request::instance(),初始化Request,该函数是一个单例模式的函数。
2. 调用self::instance(),初始化应用。
2.1. 判断是否为调试模式,是否输出错误信息
2.2. 注册应用命名空间
2.3. 加载config.php中配置的extra_file_list扩展函数文件。
2.4. 设置config.php中配置的default_timezone默认时区
2.5. 执行Hook::listen('app_init');
3. 绑定路由模块,如果在配置文件中定义了auto_bind_module则自动绑定入口文件。
4. 根据配置文件中配置的default_fileter,设置默认过滤函数,过滤请求内容
5. 判断是否开启多语言机制,并加载相应的语言包文件。
6. 根据请求路由,获得调度信息,并保存调度信息。
7. 判断请求类型,以及是否设置了请求缓存,如果存在并没有过期则执行重定向。该操作会极大的节省服务器的性能,但也会让数据延迟,适合数据不经常更新的页面使用。
7.1. redirect类型,在配置文件里开启了request_cache后,再次请求同一个页面,会直接重定向到原来的缓存页面,不会再重新加载页面。
7.2. module类型,普通的页面请求,会调用self::module()函数,获得请求的模块,控制器和操作,并通过反射函数self::invokeMethod()执行action。
7.3. controller类型:暂时还不知道什么时候回执行。
7.4. method类型:执行回调函数,也是通过self::invokeMethod()反射函数来执行的。
7.5. function类型:执行闭包函数,比如查询的是否传入的闭包函数。这个通过self::invokeFunction()方法执行的
7.6. response类型:响应页面请求。
7.7. 如果不满足以上几种请求,则会抛出 InvalidArgumentException(dispatch type not support)异常。
8. 响应数据,并输出到客户端。结束本次请求