杰瑞科技汇

ThinkPHP使用教程适合新手入门吗?

ThinkPHP 6.0 完整使用教程

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

ThinkPHP使用教程适合新手入门吗?-图1
(图片来源网络,侵删)

本教程将以 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: 框架运行时产生的文件,如日志文件、缓存文件,这个目录需要可写权限。

运行你的第一个项目

  1. 配置 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;
          }
      }
  2. 访问: 配置好服务器后,在浏览器中访问你的域名或 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': 对应的控制器和方法。IndexControllerapp/controller 目录下的 Index.php 文件中的类,hello 是类中的一个公共方法。

示例 2: 路由参数

// route/app.php
Route::get('user/:id', 'UserController/getUser');

访问 http://your-domain.com/user/123123 就会被作为 id 参数传递给 UserControllergetUser 方法。

在控制器中获取参数:

// 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 就会调用 HelloControllerindex 方法。

访问 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 从环境搭建到核心功能(路由、控制器、模型、视图)再到进阶概念(依赖注入、中间件)的全过程。

学习路径建议:

  1. 动手实践: 照着教程把每个例子都亲手敲一遍,运行起来。
  2. 阅读官方文档: ThinkPHP 6.0 完全开发手册 是最权威、最详细的资料,遇到问题第一时间查阅。
  3. 构建小项目: 尝试用 ThinkPHP 写一个简单的博客系统或待办事项列表,这是巩固知识的最好方法。
  4. 探索更多: 学习更多高级特性,如事件、行为、命令行工具、多应用模式等。

ThinkPHP 设计优雅,文档完善,社区活跃,非常适合 PHP 开发者使用,祝你学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇