ThinkPHP 5 入门教程:从零开始构建你的第一个应用
目录
- 前言:什么是 ThinkPHP?
- 环境准备:你需要什么?
- 第一步:安装 ThinkPHP 5
- 第二步:项目结构初探
- 第三步:配置数据库
- 第四步:创建数据表
- 第五步:创建模型
- 第六步:创建控制器
- 第七步:创建视图
- 第八步:定义路由
- 第九步:运行与访问
- 总结与下一步
前言:什么是 ThinkPHP?
ThinkPHP 是一个开源的、快速、简单的面向对象的轻量级 PHP 开发框架,它遵循 Apache2 开源协议发布,是为了敏捷 Web 应用开发和简化企业级应用开发而诞生的。

ThinkPHP 就像一个“工具箱”或“脚手架”,它提供了一套规范和现成的工具,让你可以不用从零开始写所有代码,从而更专注于业务逻辑的开发,提高开发效率。
ThinkPHP 5 是一个里程碑式的版本,它引入了更多现代化的特性,如:
- 更好的性能
- 严格遵循 PSR 标准 (PHP Standards Recommendation)
- 依赖注入容器
- 更简洁的 API 设计
环境准备:你需要什么?
在开始之前,请确保你的电脑上已经安装了以下软件:
- PHP: 版本要求
>=5.6.0(推荐0+,因为性能更好) - Composer: PHP 的依赖管理工具,用于安装 ThinkPHP 框架。
- Web 服务器: Apache 或 Nginx (这里我们推荐使用
PHP 内置 Web 服务器,对于入门最简单)。 - 数据库: MySQL (5.6+) 或 MariaDB。
如何检查? 打开你的终端(Windows下是CMD或PowerShell,Mac/Linux下是Terminal),输入以下命令:

php -v # 查看PHP版本 composer --version # 查看Composer版本
如果都显示版本号,说明环境已经准备好了。
第一步:安装 ThinkPHP 5
ThinkPHP 官方推荐使用 Composer 来安装,因为它可以自动处理框架的依赖关系。
-
打开终端,进入你希望存放项目的目录(
D:\www或/var/www/html)。 -
执行安装命令:
(图片来源网络,侵删)composer create-project topthink/think tp5
composer create-project: 这是 Composer 创建新项目的命令。topthink/think: 这是 ThinkPHP 5 在 Packagist (PHP包仓库) 上的名称。tp5: 这是你要创建的项目文件夹名。
-
等待安装完成,这个过程会下载 ThinkPHP 框架及其所有依赖包,可能需要几分钟时间。
安装成功后,你的项目目录下会出现一个名为 tp5 的文件夹,里面就是 ThinkPHP 5 的完整项目结构。
第二步:项目结构初探
用你的代码编辑器(如 VS Code, PhpStorm)打开 tp5 文件夹,你会看到以下主要目录和文件:
tp5/
├── app/ # 应用目录,我们所有的业务代码都写在这里
│ ├── controller/ # 控制器目录:处理用户请求,调用模型和视图
│ ├── model/ # 模型目录:与数据库交互,处理数据
│ └── view/ # 视图目录:存放 HTML 模板文件
├── config/ # 配置目录:存放各种配置文件(数据库、路由等)
├── public/ # 入口目录:Web 服务器的访问根目录
│ └── index.php # 应用入口文件
├── route/ # 路由目录:定义 URL 访问规则
├── thinkphp/ # 框架核心目录
├── vendor/ # Composer 依赖包目录
├── .env # 环境配置文件(用于配置数据库连接等)
└── composer.json # 项目依赖配置文件
核心思想:
- 入口文件
public/index.php: 所有请求都通过这个文件进入应用。 app目录: 应用的核心,分为 M (Model)、V (View)、C (Controller) 三层。config目录: 集中管理配置,方便维护。
第三步:配置数据库
ThinkPHP 5 使用 .env 文件来配置数据库信息,这样做的好处是敏感信息不会暴露在代码中。
-
在项目根目录找到
.env.example文件,将其复制一份并重命名为.env。 -
用编辑器打开
.env文件,找到数据库配置部分,并填入你自己的数据库信息:[APP] DEBUG = true [DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = tp5_db # 数据库名,待会我们创建 USERNAME = root # 数据库用户名 PASSWORD = your_password # 数据库密码 HOSTPORT = 3306 CHARSET = utf8mb4 DEBUG = true
第四步:创建数据表
我们需要在数据库中创建一个数据表来存储数据,我们可以使用 ThinkPHP 5 提供的命令行工具来生成。
-
连接数据库: 使用你喜欢的 MySQL 客户端工具(如 Navicat, phpMyAdmin, 或者命令行),登录到你的 MySQL 服务器。
-
创建数据库: 执行 SQL 语句创建一个名为
tp5_db的数据库。CREATE DATABASE tp5_db CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-
使用命令行生成数据表迁移文件:
- 回到终端,进入你的
tp5项目目录。 - 执行 ThinkPHP 的命令:
php think make:migrate create_user_table
- 这条命令会在
database/migrations/目录下创建一个新的迁移文件,文件名类似20250101000001_create_user_table.php。
- 回到终端,进入你的
-
编辑迁移文件: 打开这个新生成的文件,在
up()方法中编写创建表的 SQL 代码:// database/migrations/..._create_user_table.php public function up() { Schema::create('user', function (Blueprint $table) { $table->increments('id'); $table->string('name', 50)->comment('用户名'); $table->string('email', 100)->unique()->comment('邮箱'); $table->timestamps(); // 自动创建 created_at 和 updated_at 字段 }); } -
执行迁移: 在终端执行以下命令,ThinkPHP 会自动执行
up()方法中的 SQL 语句来创建数据表。php think migrate:run
如果看到
Migration successed.,说明数据表user已经成功创建!
第五步:创建模型
模型负责与数据库表进行交互,我们为 user 表创建一个对应的模型。
在终端执行:
php think make:model app/model/User
这会在 app/model/ 目录下创建 User.php 文件,默认情况下,这个文件已经有了基本的结构,并且会自动关联到 user 表(遵循驼峰命名转下划线命名规则,User -> user)。
你可以稍微修改一下,添加一些可填充字段,方便后续批量赋值:
// app/model/User.php
namespace app\model;
use think\Model;
class User extends Model
{
// 设置字段信息
protected $schema = [
'id' => 'int',
'name' => 'string',
'email' => 'string',
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
// 设置自动时间戳
protected $autoWriteTimestamp = true;
// 设置允许 mass-assignment 的字段
protected $allowField = ['name', 'email'];
}
第六步:创建控制器
控制器是用户请求的入口,它接收请求,调用模型获取数据,然后加载视图展示给用户。
为用户管理创建一个控制器:
php think make:controller app/controller/User
这会在 app/controller/ 目录下创建 User.php 文件,我们来编写一个 index 方法,用于显示所有用户列表:
// app/controller/User.php
namespace app\controller;
use app\BaseController;
use app\model\User; // 引入User模型
class User extends BaseController
{
public function index()
{
// 1. 从User模型中获取所有用户数据
$users = User::select();
// 2. 将数据传递给视图
// view() 函数用于渲染模板
// 'user/index' 对应 app/view/user/index.html 文件
// ['users' => $users] 是传递给模板的变量
return view('user/index', ['users' => $users]);
}
}
第七步:创建视图
视图是展示数据的 HTML 模板,我们需要创建一个目录和文件来承接控制器传递过来的数据。
- 在
app/view/目录下创建一个名为user的子目录。 - 在
app/view/user/目录下创建一个名为index.html的文件。
编辑 app/view/user/index.html 文件内容:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">用户列表</title>
<style>
body { font-family: sans-serif; }
table { border-collapse: collapse; width: 80%; margin: 20px auto; }
th, td { border: 1px solid #dddddd; text-align: left; padding: 8px; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1 style="text-align: center;">用户列表</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>用户名</th>
<th>邮箱</th>
<th>创建时间</th>
</tr>
</thead>
<tbody>
{volist name="users" id="user"}
<tr>
<td>{$user.id}</td>
<td>{$user.name}</td>
<td>{$user.email}</td>
<td>{$user.created_at}</td>
</tr>
{/volist}
</tbody>
</table>
</body>
</html>
模板引擎语法说明:
{volist name="users" id="user"}: 这是一个循环标签,name指的是控制器传递过来的数组变量名,id指的是循环时每个元素的临时变量名。{$user.id}: 这是输出变量值的语法,$user是循环变量,id是它的属性。
第八步:定义路由
路由负责将 URL 请求映射到指定的控制器和方法,ThinkPHP 5 的路由非常灵活。
打开 route/app.php 文件,在最后添加一行代码:
// route/app.php
// ... 原有代码 ...
// 添加以下路由
Route::get('user', 'user/index');
这行代码的意思是:当用户访问 http://你的域名/user 这个 URL 时,系统会自动执行 app\controller\User 控制器中的 index 方法。
第九步:运行与访问
一切准备就绪!现在让我们启动项目。
- 启动 PHP 内置 Web 服务器:
在你的终端(确保在
tp5项目根目录下)执行:php think run
- 查看输出信息:
你会看到类似下面的输出:
<info>server run at: http://127.0.0.1:8000</info> - 在浏览器中访问:
打开你的浏览器,访问上面显示的地址,并在后面加上我们定义的路由:
http://127.0.0.1:8000/user
如果一切顺利,你应该能看到一个漂亮的用户列表页面!虽然目前列表是空的,但我们的框架已经成功运行并连接了数据库。
总结与下一步
恭喜你!你已经成功完成了 ThinkPHP 5 的入门教程,搭建了一个完整的 MVC 应用。
回顾一下我们做了什么:
- 安装了 ThinkPHP 5 框架。
- 熟悉了项目的基本结构。
- 配置了数据库连接。
- 使用命令行创建了数据表、模型、控制器和视图。
- 定义了路由来连接 URL 和控制器。
- 成功运行并访问了应用。
下一步可以学习什么?
- CURD 操作: 学习如何创建、读取、更新和删除数据,在
User控制器中添加save()方法来保存新用户。 - 表单验证: 学习如何使用 ThinkPHP 的验证器来验证用户提交的数据。
- 中间件: 了解如何使用中间件来处理如用户登录认证等公共逻辑。
- 关联模型: 学习模型之间的关联关系(一对一、一对多、多对多)。
- 使用模板引擎: 深入学习 ThinkPHP 的模板引擎,如
include、if、switch等高级用法。
ThinkPHP 5 的官方文档是学习的最佳资源,地址是:https://www.kancloud.cn/manual/thinkphp5_1/content
希望这份教程对你有帮助,祝你学习愉快!
