ThinkPHP 6.0 完整使用教程
ThinkPHP 是一个免费、开源、快速、简单的面向对象的轻量级 PHP 开发框架,遵循 Apache2.0 协议发布,是为了敏捷 Web 应用开发和简化企业级应用开发而诞生的。

本教程将以 ThinkPHP 6.0 为例进行讲解,因为它是目前的主流稳定版本,并且与 5.x 版本有较大区别。
第一部分:入门基础
环境要求
在开始之前,请确保你的开发环境满足以下要求:
- PHP 版本:
>= 7.2.5 - PDO PHP Extension: 必须安装
- Mbstring PHP Extension: 强烈建议安装
- Fileinfo PHP Extension: 强烈建议安装
- CURL PHP Extension: 用于 HTTP 请求
- Composer: PHP 的依赖管理工具,必须安装。
安装 ThinkPHP
最简单的方式是使用 Composer 创建一个新项目。
打开你的终端(命令行工具),执行以下命令:
# 创建一个 think 项目,指定版本为 6.0.x composer create-project topthink/think tp6
composer create-project: Composer 的命令,用于从现有包创建项目。topthink/think: ThinkPHP 的官方包名。tp6: 你想创建的项目目录名。
等待 Composer 安装完成,你的项目结构就搭建好了。
目录结构解析
了解目录结构是学习框架的第一步,进入 tp6 目录,你会看到以下主要文件和文件夹:
tp6
├── app // 应用目录
│ ├── controller // 控制器目录
│ ├── model // 模型目录
│ ├── view // 视图目录
│ └── ... // 其他应用目录
├── config // 配置文件目录
├── extend // 扩展类库目录
├── public // Web 访问目录(对外入口)
│ ├── static // 静态资源目录
│ └── index.php // 入口文件
├── route // 路由定义目录
├── runtime // 应用的运行时目录(日志、缓存等)
├── vendor // Composer 依赖目录
├── .example.env // 环境变量示例文件
├── composer.json // Composer 配置文件
└── think // 命令行工具入口文件
核心目录说明:
public: 这是你的 Web 服务(如 Apache, Nginx)指向的根目录,所有外部请求都通过public/index.php进入。app: 你的业务代码主要写在这里。config: 存放各种配置文件,如数据库、缓存、session 等。route: 定义你的 URL 路由规则。runtime: 框架运行时产生的文件,如日志文件、缓存文件,这个目录需要可写权限。
运行你的第一个项目
-
配置 Web 服务器:
-
最简单的方式: 如果你使用 PHP 内置的 Web 服务器,在项目根目录(
tp6)下运行:php -S localhost:8000 public/
然后在浏览器中访问
http://localhost:8000。 -
推荐方式 (Nginx/Apache): 将 Web 服务器的根目录指向
tp6/public目录,Nginx 配置示例:server { listen 80; server_name your-domain.com; root /path/to/tp6/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
-
-
访问: 配置好服务器后,在浏览器中访问你的域名或
http://localhost:8000,如果看到 ThinkPHP 的欢迎页面,说明安装成功了!
第二部分:核心概念与实战
路由
路由负责将 URL 请求映射到具体的处理方法(通常是控制器方法)。
ThinkPHP 的路由默认是关闭的,你需要手动开启,打开 config/route.php,将 ['url_route_on' => true] 的注释去掉。
定义路由:
在 route/app.php 文件中定义路由。
示例 1: 定义一个 GET 路由
// route/app.php
use think\facade\Route;
// 定义一个首页路由
Route::get('hello', 'IndexController/hello');
Route::get: 定义一个 GET 请求的路由。'hello': 访问的 URL 路径。'IndexController/hello': 对应的控制器和方法。IndexController是app/controller目录下的Index.php文件中的类,hello是类中的一个公共方法。
示例 2: 路由参数
// route/app.php
Route::get('user/:id', 'UserController/getUser');
访问 http://your-domain.com/user/123,123 就会被作为 id 参数传递给 UserController 的 getUser 方法。
在控制器中获取参数:
// app/controller/UserController.php
namespace app\controller;
use app\BaseController;
class UserController extends BaseController
{
public function getUser($id)
{
return '用户ID是: ' . $id;
}
}
控制器
控制器是 MVC 模式的核心,负责接收请求、调用模型和视图,并返回响应。
创建控制器:
在 app/controller 目录下创建 HelloController.php 文件:
// app/controller/HelloController.php
namespace app\controller;
use app\BaseController;
class HelloController extends BaseController
{
public function index()
{
return '<h1>Hello, ThinkPHP!</h1>';
}
public function hello($name = 'ThinkPHP')
{
return '你好, ' . $name;
}
}
namespace app\controller;: 命名空间,必须与文件路径一致。use app\BaseController;: 引入基础控制器类,并继承它。- 方法的访问权限必须是
public。
访问控制器方法:
如果你定义了路由 Route::get('hello', 'HelloController/hello');,访问 http://your-domain.com/hello 就会调用 HelloController 的 index 方法。
访问 http://your-domain.com/hello/thinkphp 会调用 hello 方法,并显示 你好, thinkphp。
数据库配置与操作
配置数据库:
复制项目根目录下的 .example.env 文件,重命名为 .env,然后修改其中的数据库配置:
# .env [APP] DEBUG = true [DATABASE] TYPE = mysql HOSTNAME = 127.0.0.1 DATABASE = tp6_test # 你的数据库名 USERNAME = root # 你的数据库用户名 PASSWORD = # 你的数据库密码 HOSTPORT = 3306 CHARSET = utf8mb4 DEBUG = true
创建数据表:
在你的 MySQL 数据库中执行以下 SQL 语句:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '用户名', `email` varchar(100) NOT NULL COMMENT '邮箱', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
使用模型进行增删改查
创建模型:
在 app/model 目录下创建 User.php 文件:
// app/model/User.php
namespace app\model;
use think\Model;
class User extends Model
{
// 设置数据表名(如果与模型名不同,需要设置)
// protected $table = 'user';
// 设置主键
// protected $pk = 'id';
// 自动写入时间戳
protected $autoWriteTimestamp = true;
}
在控制器中使用模型:
修改 HelloController.php,进行数据库操作:
// app/controller/HelloController.php
namespace app\controller;
use app\BaseController;
use app\model\User; // 引入模型
class HelloController extends BaseController
{
public function db()
{
// 1. 查询
// 获取所有用户
$users = User::select();
// dump($users); // 使用 dump() 函数打印数据,方便调试
// 获取单个用户
// $user = User::find(1);
// 2. 新增
// $user = new User;
// $user->name = '张三';
// $user->email = 'zhangsan@example.com';
// $user->save();
// 3. 修改
// $user = User::find(1);
// $user->name = '李四';
// $user->save();
// 4. 删除
// User::destroy(1);
return '数据库操作成功,请查看日志或数据库。';
}
}
然后定义一个路由来访问这个方法:Route::get('db', 'HelloController/db');
视图
视图负责展示数据,通常是 HTML 模板。
开启视图功能:
确保 config/view.php 中的 type 配置为 Think。
渲染视图:
修改 HelloController,添加一个方法来渲染视图。
// app/controller/HelloController.php
// ... 其他代码 ...
public function view()
{
// 1. 准备要传递给视图的数据
$name = 'ThinkPHP';
$users = User::select();
// 2. 渲染视图并传递数据
// 模板文件路径:app/view/hello/index.html
return view('hello/index', ['name' => $name, 'users' => $users]);
}
创建模板文件:
在 app/view 目录下创建 hello 文件夹,然后在其中创建 index.html 文件。
<!-- app/view/hello/index.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">ThinkPHP 视图示例</title>
</head>
<body>
<h1>你好, {$name}!</h1>
<h2>用户列表</h2>
<ul>
{volist name="users" id="user"}
<li>ID: {$user.id} - 姓名: {$user.name} - 邮箱: {$user.email}</li>
{/volist}
</ul>
</body>
</html>
{$name}: ThinkPHP 的模板引擎使用{$变量名}来输出变量。{volist name="users" id="user"}: 循环遍历users数组,每次循环将当前元素赋值给user变量。
定义路由:Route::get('view', 'HelloController/view');,访问即可看到渲染后的页面。
第三部分:进阶与最佳实践
依赖注入与容器
ThinkPHP 使用了强大的 依赖注入 和 服务容器 模式。
你不需要手动 new 一个类,而是通过方法参数或类型提示来“注入”依赖,框架会自动解析并实例化你需要的对象。
示例:
// app/controller/HelloController.php
use app\BaseController;
use app\model\User; // 引入模型
class HelloController extends BaseController
{
// User 模型会通过容器自动注入
public function test(User $user)
{
// 直接使用注入的 $user 对象
$user->name = '王五';
return $user->name;
}
}
当你访问 test 方法时,ThinkPHP 会自动创建一个 User 模型的实例并传递给你,这使得代码更解耦、更易于测试和维护。
中间件
中间件是在请求到达最终处理逻辑之前或之后执行的一段代码,常用于身份验证、权限检查、日志记录等。
创建中间件:
# 使用命令行创建一个名为 Auth 的中间件 php think make:middleware Auth
这会在 app/middleware 目录下创建 Auth.php 文件。
// app/middleware/Auth.php
namespace app\middleware;
class Auth
{
public function handle($request, \Closure $next)
{
// 在请求处理之前执行
if (!$request->session('user_id')) {
return redirect('/login'); // 如果未登录,跳转到登录页
}
// 将请求传递给下一个中间件或控制器
$response = $next($request);
// 在请求处理之后执行
// ...
return $response;
}
}
注册中间件:
可以在路由中单独注册,也可以全局注册。
-
路由注册:
// route/app.php Route::get('admin', 'AdminController/index')->middleware('auth'); -
全局注册: 在
app/middleware.php中配置:// app/middleware.php return [ \app\middleware\Auth::class, // 全局生效 ];
这份教程涵盖了 ThinkPHP 6.0 从环境搭建到核心功能(路由、控制器、模型、视图)再到进阶概念(依赖注入、中间件)的全过程。
学习路径建议:
- 动手实践: 照着教程把每个例子都亲手敲一遍,运行起来。
- 阅读官方文档: ThinkPHP 6.0 完全开发手册 是最权威、最详细的资料,遇到问题第一时间查阅。
- 构建小项目: 尝试用 ThinkPHP 写一个简单的博客系统或待办事项列表,这是巩固知识的最好方法。
- 探索更多: 学习更多高级特性,如事件、行为、命令行工具、多应用模式等。
ThinkPHP 设计优雅,文档完善,社区活跃,非常适合 PHP 开发者使用,祝你学习愉快!
