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
- 作用:初始化框架核心,启动内核。
- 执行步骤:
- 加载基础定义文件
think/base.php。 - 初始化环境变量(如
APP_DEBUG)。 - 加载应用配置(
application/config.php)。 - 注册自动加载器(Composer + ThinkPHP 自动加载)。
- 启动路由解析。
- 加载基础定义文件
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')。 - 若未匹配自定义路由,则使用默认路由规则解析。
- 定义 URL 路由规则(如
-
路由解析过程:
- 解析 URL 中的
controller和action。 - 加载对应模块的配置文件(如
application/index/config.php)。
- 解析 URL 中的
5. 控制器执行
- 控制器路径:
application/index/controller/Index.phpnamespace app\index\controller; class Index { public function index() { return 'Hello World'; } } - 执行流程:
- 实例化控制器类。
- 调用对应的 Action 方法(如
index())。 - 渲染视图(若存在
view目录下的模板文件)。
6. 模型与数据库交互
- 模型文件:
application/index/model/User.phpnamespace 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();
四、完整执行顺序总结
- 用户访问 URL → 触发
public/index.php。 - 加载框架核心 → 执行
thinkphp/start.php。 - 初始化环境 → 加载
convention.php和config.php。 - 解析路由 → 匹配 URL 到控制器。
- 执行控制器 → 调用模型和业务逻辑。
- 渲染视图 → 输出 HTML 或 JSON 响应。
- 记录日志 → 写入
runtime/log。
五、调试与优化建议
- 查看日志:
runtime/log/app.log记录运行时错误。 - 开启调试模式:设置
app_debug = true(config.php)。 - 路由缓存:生产环境可启用路由缓存(
route.php)提升性能。
通过理解这一流程,您可以更高效地定位问题(如配置未生效、路由不匹配)并进行定制化开发。

3705

被折叠的 条评论
为什么被折叠?



