thinkphp5的所有文件的运行顺序

project  应用部署目录
├─application           应用目录(可设置)
│  ├─common             公共模块目录(可更改)
│  ├─index              模块目录(可更改)
│  │  ├─config.php      模块配置文件
│  │  ├─common.php      模块函数文件
│  │  ├─controller      控制器目录
│  │  ├─model           模型目录
│  │  ├─view            视图目录
│  │  └─ ...            更多类库目录
│  ├─command.php        命令行工具配置文件
│  ├─common.php         应用公共(函数)文件
│  ├─config.php         应用(公共)配置文件
│  ├─database.php       数据库配置文件
│  ├─tags.php           应用行为扩展定义文件
│  └─route.php          路由配置文件
├─extend                扩展类库目录(可定义)
├─public                WEB 部署目录(对外访问目录)
│  ├─static             静态资源存放目录(css,js,image)
│  ├─index.php          应用入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于 apache 的重写
├─runtime               应用的运行时目录(可写,可设置)
├─vendor                第三方类库目录(Composer)
├─thinkphp              框架系统目录
│  ├─lang               语言包目录
│  ├─library            框架核心类库目录
│  │  ├─think           Think 类库包目录
│  │  └─traits          系统 Traits 目录
│  ├─tpl                系统模板目录
│  ├─.htaccess          用于 apache 的重写
│  ├─.travis.yml        CI 定义文件
│  ├─base.php           基础定义文件
│  ├─composer.json      composer 定义文件
│  ├─console.php        控制台入口文件
│  ├─convention.php     惯例配置文件
│  ├─helper.php         助手函数文件(可选)
│  ├─LICENSE.txt        授权说明文件
│  ├─phpunit.xml        单元测试配置文件
│  ├─README.md          README 文件
│  └─start.php          框架引导文件
├─build.php             自动生成定义文件(参考)
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
├─think                 命令行入口文件

一、整体执行流程概览​

graph TD
    A[用户访问 URL] --> B(public/index.php)
    B --> C(thinkphp/start.php)
    C --> D[加载环境配置]
    D --> E[框架初始化]
    E --> F[加载应用配置]
    F --> G[路由解析]
    G --> H[控制器执行]
    H --> I[模型/视图交互]
    I --> J[输出响应]

​二、核心文件运行顺序详解​

​1. Web 请求入口:public/index.php
  • ​作用​​:Web 请求的唯一入口文件,负责启动框架。
  • ​关键操作​​:
    // 定义应用目录(可修改)
    define('APP_PATH', __DIR__ . '/../application/');
    
    // 加载框架引导文件
    require __DIR__ . '/../thinkphp/start.php';
  • ​注意​​:生产环境需配置 .htaccess 实现 URL 重写(隐藏 index.php)。

​2. 框架引导文件:thinkphp/start.php
  • ​作用​​:初始化框架核心,启动内核。
  • ​执行步骤​​:
    1. 加载基础定义文件 think/base.php
    2. 初始化环境变量(如 APP_DEBUG)。
    3. 加载应用配置(application/config.php)。
    4. 注册自动加载器(Composer + ThinkPHP 自动加载)。
    5. 启动路由解析。

​3. 环境配置与初始化​
  • ​环境检测文件​​:thinkphp/convention.php

    • 定义框架默认配置(如数据库、缓存、日志路径)。
    • 可通过 application/convention.php 覆盖默认配置。
  • ​应用配置文件​​:application/config.php

    • 定义数据库连接、模板引擎、应用调试模式等。
    return [
        'app_debug' => true,       // 调试模式
        'database' => [            // 数据库配置
            'type' => 'mysql',
            'host' => '127.0.0.1',
        ]
    ];

​4. 路由解析​
  • ​路由配置文件​​:application/route.php

    • 定义 URL 路由规则(如 'index/index/index' => 'Index/Index/index')。
    • 若未匹配自定义路由,则使用默认路由规则解析。
  • ​路由解析过程​​:

    1. 解析 URL 中的 controller 和 action
    2. 加载对应模块的配置文件(如 application/index/config.php)。

​5. 控制器执行​
  • ​控制器路径​​:application/index/controller/Index.php
    namespace app\index\controller;
    class Index {
        public function index() {
            return 'Hello World';
        }
    }
  • ​执行流程​​:
    1. 实例化控制器类。
    2. 调用对应的 Action 方法(如 index())。
    3. 渲染视图(若存在 view 目录下的模板文件)。

​6. 模型与数据库交互​
  • ​模型文件​​:application/index/model/User.php
    namespace app\index\model;
    use think\Model;
    class User extends Model {
        // 定义模型关联或业务逻辑
    }
  • ​数据库操作​​:
    • 通过 Db 类直接操作(如 Db::name('user')->select())。
    • 通过模型类进行 ORM 操作(如 $user = User::get(1);)。

​7. 视图渲染​
  • ​视图文件路径​​:application/index/view/Index/index.html
    <h1>{$title}</h1>
  • ​控制器中渲染​​:
    $this->assign('title', '首页');
    return $this->fetch();

​三、其他关键文件与目录​

​1. 运行时目录:runtime
  • ​作用​​:存储缓存、日志、编译后的模板文件。
  • ​自动生成​​:首次访问时创建,需确保目录可写。
  • ​关键文件​​:
    • runtime/log/:日志文件。
    • runtime/temp/:临时文件。
    • runtime/route.php:编译后的路由缓存。

​2. 扩展目录:extend
  • ​用途​​:存放自定义扩展类库(如自定义函数库)。
  • ​加载方式​​:通过 import() 函数手动加载,例如:
    import('extend.MyClass', EXTEND_PATH);

​3. Composer 目录:vendor
  • ​作用​​:存放通过 Composer 安装的第三方依赖。
  • ​自动加载​​:由 vendor/autoload.php 实现 PSR-4 自动加载。

​4. 命令行入口:think
  • ​路径​​:项目根目录的 think 文件。
  • ​用途​​:执行 Artisan 风格的命令行指令(如 php think migrate)。
  • ​执行流程​​:
    # 加载框架核心
    require __DIR__ . '/thinkphp/base.php';
    
    # 执行命令行指令
    $command = new \think\Console();
    $command->run();

​四、完整执行顺序总结​

  1. ​用户访问 URL​​ → 触发 public/index.php
  2. ​加载框架核心​​ → 执行 thinkphp/start.php
  3. ​初始化环境​​ → 加载 convention.php 和 config.php
  4. ​解析路由​​ → 匹配 URL 到控制器。
  5. ​执行控制器​​ → 调用模型和业务逻辑。
  6. ​渲染视图​​ → 输出 HTML 或 JSON 响应。
  7. ​记录日志​​ → 写入 runtime/log

​五、调试与优化建议​

  1. ​查看日志​​:runtime/log/app.log 记录运行时错误。
  2. ​开启调试模式​​:设置 app_debug = trueconfig.php)。
  3. ​路由缓存​​:生产环境可启用路由缓存(route.php)提升性能。

通过理解这一流程,您可以更高效地定位问题(如配置未生效、路由不匹配)并进行定制化开发。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值