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();

这个文件做了三件事

  1. 定义了整个框架的命名空间think
  2. 加载了文件base.php
  3. 执行了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(代码片段

微信小程序实现微信登陆(TP5后端)

tp5.1的安装与运行流程

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程