三小时内可用的ThinkPHP 6.0博客系统完全可行,聚焦文章发布→列表展示→详情阅读→简单分类闭环;含环境搭建、双表迁移与模型、四页面路由控制器模板、后台发布及基础优化。

三小时用 ThinkPHP 6.0 搭建一个可用的博客系统,完全可行——前提是目标明确、不堆功能、聚焦核心链路。重点不是写多酷炫的后台,而是跑通「文章发布→列表展示→详情阅读→简单分类」这完整闭环。
一、环境准备与项目初始化(15 分钟)
确保已安装 PHP 7.2+、Composer 和命令行工具。执行以下命令快速创建 TP6 项目:
- composer create-project topthink/think blog —— 创建项目,目录名为 blog
- cd blog && php think run —— 启动内置服务器,默认访问 http://127.0.0.1:8000
- 删除 public/static 下默认示例文件,新建空 css/、js/、uploads/ 目录(上传图片用)
二、数据库与模型设计(25 分钟)
只需两张表:文章(blog_post)和分类(blog_category)。用 TP6 的 migrate 快速建表:
- 运行 php think migrate:create CreateBlogCategoryTable,编辑生成的迁移文件,定义 id, name, slug
- 同理建 CreateBlogPostTable,字段包括:id, title, slug, content, category_id, status (0草稿/1发布), create_time
- php think migrate:run 执行迁移;再用 php think seed:run 插入几条测试分类和文章
- 在 app/model/ 下创建 Post.php 和 Category.php,配置关联:
Post belongsTo Category
三、路由 + 控制器 + 前端模板(90 分钟)
按「最少必要」原则实现四个页面:首页列表、分类页、文章详情、后台发布(仅限本地登录验证):
- 在 route/app.php 中定义路由:
Route::get('/', 'index/index') → 首页
Route::get('category/:slug', 'index/category')
Route::get('post/:slug', 'index/detail')
Route::group('admin')->middleware('checkAuth')->rule(['POST' => 'admin/post/save']) - app/controller/Index.php 实现三个方法:index() 查所有已发布文章(含分类名),category() 根据 slug 查该分类下文章,detail() 查单篇文章并渲染
- 模板全放 view/index/ 下:index.html(循环输出标题+摘要+分类),detail.html(显示全文+返回链接),用 {:url('index/index')} 生成地址
- 后台简易登录:中间件 CheckAuth 判断 session 是否存在 admin_login=1;登录页用纯 HTML 表单 POST 到 /admin/login,成功后 setSession 并跳转
四、发布与小优化(30 分钟)
让博客真正可写、可读、不报错:
- 后台添加文章页(admin/post/create):一个表单,含标题、分类下拉(查 blog_category)、内容(textarea)、提交按钮
- 保存逻辑:接收 POST 数据 → 过滤 XSS(htmlspecialchars())→ 生成 slug(用 TP6 的 Str::snake($title))→ 写入数据库 → 跳转详情页
- 图片上传支持:表单加 enctype="multipart/form-data",控制器中用 $file = $this->request->file('cover') → 移动到 public/uploads/ → 存路径到数据库字段
- 最后检查:URL 友好(去掉 index.php)、404 页面(app/view/404.html)、CSS 加载正常、手机端基本适配(用 rem 或 viewport 简单处理)
不追求高并发、不集成 Redis、不搞前后端分离——三小时内,你已拥有一个可部署、可写、可分享的个人博客原型。代码干净、结构清晰,后续想加评论、标签、搜索,都是顺手的事。


















