PHP 框架入门:ThinkPHP 基础教程(2026实战)

小飞兽 PHP 429 次阅读 2026-07-08

引言

ThinkPHP 是国内最流行的 PHP 框架之一,2006年发布至今已有近20年历史。它以简单、开源、中文文档完善著称,是国内 Web 开发入门首选框架。

一、ThinkPHP 版本选择

目前主流版本:

  • <strong>ThinkPHP 5.1</strong>(LTS,维护到2024年,稳定成熟)

  • <strong>ThinkPHP 6.0</strong>(最新,PHP 7.2+,现代架构)

  • <strong>ThinkPHP 8.0</strong>(2024年发布,PHP 8.1+,性能大幅提升)

初学者推荐从 ThinkPHP 6.0 开始,5.1 和 6.0 核心用法差异不大,迁移成本低。

二、安装与项目创建

方式一:Composer 创建(推荐)

composer create-project topthink/think myapp
cd myapp

方式二:手动下载

去官网 thinkphp.cn 下载压缩包,解压到网站目录即可。

目录结构

myapp/
├── app/              # 应用核心目录
│   ├── controller/   # 控制器
│   ├── model/        # 模型
│   └── view/         # 视图
├── config/           # 配置文件
├── route/            # 路由配置
├── public/           # 公开访问目录(入口文件在这里)
├── runtime/          # 运行时目录(日志、缓存)
└── composer.json     # 依赖管理

三、入口文件与运行

ThinkPHP 通过 public/index.php 作为单一入口:

// public/index.php
define('APP_PATH', __DIR__ . '/../app/');
require __DIR__ . '/../vendor/autoload.php';
(new think\App())->run();

启动开发服务器:

cd myapp
php think run
# 输出:You can visit http://127.0.0.1:8000

四、路由与控制器

定义路由

编辑 route/app.php

use think\facade\Route;

Route::get('/', function(){
    return '欢迎访问 ThinkPHP!';
});

Route::get('/hello/:name', 'index/hello');
Route::post('/save', 'index/save');

路由规则:

  • <code>:name</code> 是动态参数

  • 默认访问 <code>app/controller/Index.php</code> 的 <code>hello</code> 方法

创建控制器

php think make:controller index

编辑 app/controller/Index.php

<?php
namespace app\controller;

use app\BaseController;

class Index extends BaseController
{
    public function index()
    {
        return view('index', ['title' => '首页']);
    }

    public function hello($name = 'World')
    {
        return json([
            'code' => 0,
            'message' => "你好,{$name}!"
        ]);
    }
}

五、数据库操作

配置数据库

编辑 config/database.php

return [
    'default' => 'mysql',
    'connections' => [
        'mysql' => [
            'type' => 'mysql',
            'hostname' => '127.0.0.1',
            'database' => 'myapp',
            'username' => 'root',
            'password' => '',
            'hostport' => '3306',
            'charset' => 'utf8mb4',
        ],
    ],
];

模型定义

php think make:model User

编辑 app/model/User.php

<?php
namespace app\model;

use think\Model;

class User extends Model
{
    // 指定表名(默认取类名小写)
    protected $name = 'users';

    // 自动时间戳
    protected $autoWriteTimestamp = true;

    // 只允许写入的字段
    protected $fillable = ['username', 'email', 'password'];
}

增删改查

// 插入数据
$user = User::create([
    'username' => 'admin',
    'email' => 'admin@example.com',
    'password' => password_hash('123456', PASSWORD_DEFAULT),
]);
echo $user->id; // 获取自增ID

// 查询数据
$user = User::find(1);
echo $user->username;

// 条件查询
$users = User::where('status', 1)
    ->order('id', 'desc')
    ->limit(10)
    ->select();

// 更新数据
$user = User::find(1);
$user->email = 'new@example.com';
$user->save();

// 删除数据
$user->delete();

六、视图与模板

创建视图

创建 app/view/index/hello.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>{$title|default='首页'}</title>
</head>
<body>
    <h1>欢迎,{$name|default='游客'}!</h1>

    <table border="1" cellpadding="8" cellspacing="0">
        <tr><th>ID</th><th>用户名</th><th>邮箱</th></tr>
        {volist name="users" id="user"}
        <tr>
            <td>{$user.id}</td>
            <td>{$user.username}</td>
            <td>{$user.email}</td>
        </tr>
        {/volist}
    </table>

    <p>当前时间:{$time|date='Y-m-d H:i:s'}</p>
</body>
</html>

控制器返回视图

public function index()
{
    $users = User::where('status', 1)->select();
    return view('index', [
        'title' => '用户列表',
        'name' => '小飞兽',
        'users' => $users,
        'time' => time(),
    ]);
}

模板语法

<!-- 变量输出 -->
{$name}
{$user.email}
{$data|default='默认值'}

<!-- 条件判断 -->
{if $score >= 60}
    <span style="color:green">及格</span>
{else /}
    <span style="color:red">不及格</span>
{/if}

<!-- 循环 -->
{foreach $list as $item}
    <p>{$item.name}</p>
{/foreach}

<!-- 原样输出(不过滤HTML) -->
{$htmlContent|raw}

七、中间件

中间件用于在请求处理前后执行拦截逻辑,比如登录验证、CORS、请求日志等。

创建中间件

php think make:middleware CheckLogin

编辑 app/middleware/CheckLogin.php

<?php
namespace app\middleware;

class CheckLogin
{
    public function handle($request, \Closure $next)
    {
        // 前置逻辑:检查是否登录
        if (!$request->session('?user_id')) {
            return redirect('/login');
        }

        // 执行后续逻辑
        return $next($request);
    }
}

注册中间件

编辑 app/middleware.php

return [
    'check' => \app\middleware\CheckLogin::class,
];

路由使用:

Route::get('/profile', 'user/profile')->middleware('check');

八、常见问题

Q1:访问报"No input file specified"?

这是 Nginx 配置问题,确认 public/index.php 路径正确,Nginx 配置:

location / {
    try_files $uri $uri/ /index.php?s=$uri&$args;
}

Q2:session 一直失效?

检查 .env 文件:

SESSION_DRIVER=file
SESSION_EXPIRE=3600

同时确保 runtime/session/ 目录存在且可写。

Q3:验证码不显示?

需要开启 PHP GD 扩展:

# 检查扩展
php -m | grep gd

#  Ubuntu 安装
sudo apt install php-gd
sudo systemctl reload php-fpm

Q4:数据库连接失败?

确认 MySQL 服务在运行,端口正确(默认3306),用户名密码匹配。

# 测试 MySQL 连接
mysql -u root -p -h 127.0.0.1

九、运行效果

启动后访问 http://127.0.0.1:8000/hello/tp,返回:

{"code":0,"message":"你好,tp!"}

访问 http://127.0.0.1:8000/,显示用户列表页面。

十、总结

ThinkPHP 上手只需五步:

| 步骤 | 内容 | 关键命令 |
|------|------|---------|
| 安装 | Composer 创建项目 | composer create-project topthink/think |
| 配置 | 修改 database.php | 数据库连接信息 |
| 路由 | 定义 URL 规则 | route/app.php |
| 控制器 | 处理业务逻辑 | php think make:controller |
| 模型 | 数据库操作 | php think make:model |

ThinkPHP 中文文档完善,社区活跃,遇到问题搜索中文资料基本都能解决,是国内 PHP 开发者入门的最佳选择。