tp5执行流程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tp5执行流程相关的知识,希望对你有一定的参考价值。
目录结构
使用composer在安装TP5后的目录结构如下
tp5/ ;根目录
/application ;应用目录
/index ;应用index模块目录
command.php ;命令行命令配置目录
config.php ;应用配置文件
databse.php ;应用数据库配置文件
route.php ;应用路由配置文件
/public ;入口目录
/static ;静态资源目录
.htacess ;apache服务器配置
index.php ;默认入口文件
robots.txt ;爬虫协议文件
router.php ;php命令行服务器入口文件
/extend ;框架扩展目录
/thinkphp ;框架核心目录
/lang ;框架语言目录
/library ;框架核心目录
/tpl ;框架模板目录
base.php ;全局常量文件
convention.php ;全局配置文件
helper.php ;辅助函数文件
start.php ;框架引导入口
console ;控制台入口文件
/vendor ;composer安装目录
build.php ;默认自动生成配置文件
composer.json ;composer安装配置文件
think.php ;命令行入口文件
入口文件及加载流程
如上面的目录结构,将服务器入口放在/public
文件夹中,此时访问localhost
则自动访问/public/index.php
入口文件。ThinkPHP框架默认是单入口框架,所有请求全部经过入口文件index.php
来进行访问。
可以把index.php
文件理解成整个TP框架的启动文件,PHP通过加载这个文件将整个框架所需要的PHP文件全部加载到内存中以供后续的调用。
来看看index.php
文件的内容
// [ 应用入口文件 ]
// 定义应用目录
define(‘APP_PATH‘, __DIR__ . ‘/../application/‘);
// 加载框架引导文件
require __DIR__ . ‘/../thinkphp/start.php‘;
如果不去管APP_PATH
常量的定义,那么index.php
入口文件只做了一件事,那就是加载了另一个文件start.php
。
当然,index.php
文件中还能做一些其他的事情,比如定义别的常量,不过这里不用去管那么多。
接下来去找start.php
文件,在/tp5/thinkphp/
文件夹里,打开
namespace think;
// ThinkPHP 引导文件
// 加载基础文件
require __DIR__ . ‘/base.php‘;
// 执行应用
App::run()->send();
这个文件做了三件事
- 定义了整个框架的命名空间
think
- 加载了文件
base.php
- 执行了App类的run()方法,然后利用返回的Response对象执行了send()方法
第二步加载base.php
文件,这个文件主要完成了常量定义、注册自动加载、注册错误和异常处理机制、加载惯例配置文件(convention.php)这些步骤。
注册自动加载和错误异常处理机制这两部可以简单的理解成完成这两步后所有框架写好的类文件里的类都可以直接在代码中调用了,就比如上面调用了App类的静态方法run()。
第三步执行的run()方法可以在/tp5/thinkphp/library/think/App.php
文件中找到对应方法,这个方法是整个框架的核心方法,实现了路由转换、获取调度信息、根据调度信息执行相应模块控制器的方法、获取方法返回数据、将返回数据赋值给Response
对象等一系列操作。最后,调用返回的Response
对象的send()
方法将信息返回给客户端,一次完整的http请求完成。
来源 http://www.jianshu.com/p/cd5cee8168f7
以上是关于tp5执行流程的主要内容,如果未能解决你的问题,请参考以下文章
TP5 框架 SQL 执行流程分析及 5.0.9 SQL 注入漏洞分析
TP5报如下的错误 Indirect modification of overloaded element of thinkpaginatorCollection has no effect(代码片段