ThinkPHP 8 离线手册查询
数据源(本地 md)
根目录:/Users/simon/simonspace/docs/ThinkPHP8手册/
- 根
README.md= 完整 TOC(中文章节名 → 相对路径),不确定章节归类时先读它 - 目录=中文域名(
路由/模型/…),文件名=英文 slug=在线 URL key,全局唯一 - 路径模式:
<中文目录>/<slug>.md,如路由/route_define.md - 每个 md 头部 带官方 URL:
> 📖 ... | [在线阅读](https://doc.thinkphp.cn/v8_0/<slug>.html) - 185 个章节 md(+ README),按业务域中文目录分类
本 skill 资源(按需读取)
| 文件 | 内容 | 何时读 |
|---|---|---|
references/url-index.md |
完整章节索引(17 中文目录 → 全量 slug,含子目录链式/关联) | 定位 md 路径、不确定章节归类时 Read |
references/cheatsheet.md |
速查清单(路由/中间件/模型/Db/验证/缓存/日志/命令行/容器/事件 高频代码) | 高频问题秒答,不必 Read 手册 md |
references/best-practices.md |
规范自检(PSR-12/命名) + 性能优化 + 安全清单 + 部署 checklist | 审代码、上线、规范问题时 Read |
查询流程
- 定位:知道 slug → 直接 Read
<中文目录>/<slug>.md;不知道 → 查references/url-index.md,或Grep关键词扫手册目录
Grep pattern="资源路由|resource" path="/Users/simon/simonspace/docs/ThinkPHP8手册" - Read 命中 md(干净 markdown,比 HTML 省 ~60% token)
- 答末附 md 头部的官方 URL
- 零命中兜底:本地无此章节 → 提示「本地手册无对应章节,可用
/thinkphp8-online联网查」 - 高频问题 走
references/cheatsheet.md,不用读手册 md
不规则 slug 警告(Read 时勿"规范化"猜路径)
- 删除(模型) =
shanchu(拼音,非delete_model) - 配置缓存 =
think_optimize_config(无php_前缀) - 迁移工具 =
think-migration(连字符,非下划线)
8.x 关键差异 / 易错点(防混用旧版 + 防幻觉 API)
> 经 think-orm 3.0.33 / framework 8.1.4 真实源码核验
- 环境:TP8.0 基线 PHP ≥ 8.0,8.1.x 实际需 PHP ≥ 8.1(多应用项目常 8.2+);think-orm 3.x。TP6 是 PHP7.2+,写法易串。
- 无 Laravel API:think-orm 没有
firstOrCreate/updateOrCreate/firstOrNew。"有则更新无则建"用findOrEmpty()+isEmpty()判断后save()。 find()返回:查无数据 Db 返回null,模型用findOrEmpty()返空模型(->isEmpty()),findOrFail()抛think\db\exception\DataNotFoundException。select()返回Collection(可遍历)。- 获取器签名
getXxxAttr($value, $data):$value=当前字段值,$data=全部原始数据。虚拟字段(无真实列)$value为 null,须从$data['源字段']取。 - saveAll:实例调用
(new User)->saveAll($list),非静态;带主键强制新增用saveAll($list, false)。 - 注解路由:
use think\annotation\route\{Route, Group, Get, Post, Resource, Middleware}(route 子命名空间);PHP8#[Route]特性,非 PHPDoc。装topthink/think-annotation,多应用在config/annotation.php加各应用扫描路径。 - 多应用:非内置,需
topthink/think-multi-app+config/app.php'auto_multi_app'=>true。 - 验证 fileSize 单位:字节(
fileSize:10485760=10MB),非 KB/MB。image规则校验真实图像类型。 Db::name()vsDb::table():name自动加表前缀,table用全名(含前缀)。- 软删除:
use think\model\concern\SoftDelete+protected $deleteTime;destroy()/delete()软删,真删->force()->delete();onlyTrashed()/withTrashed()/restore()。 - 时间戳:
protected $autoWriteTimestamp = 'datetime'(存日期字符串)或true(存整数时间戳)。 - 实体模型 Entity:ThinkORM 4.0+ 才有(
composer require topthink/think-orm:4.0);TP8 默认 3.x 无此特性。索引有entity章但答前先确认 orm 版本。 - 模型字段
$schema:显式定义字段类型省一次表结构查询;生产php think optimize:schema生成字段缓存。
输出约束
- ThinkPHP 8.x 写法,不混 5.x/6.x
- facade 短路径
think\facade\{Db,Cache,Log,Session,Cookie,Route,App,Request,Lang,Filesystem} - ORM think-orm 3.x(
use SoftDelete; protected $deleteTime;) - 答末附
📖 https://doc.thinkphp.cn/v8_0/<slug>.html
不该用此 Skill
- PHP 通用语法 → PHP 官方文档
- 项目业务逻辑 → 读项目代码 / CLAUDE.md
- ThinkPHP 5.x/6.x → 提示切版本
- BuildAdmin 项目封装 → 走
buildadmin(控制器继承Backend,响应$this->success/error,非裸json()) - FastAdmin 项目 → 走
fastadmin-online(FastAdmin 是 TP 5.x,_initialize()/traits\model\SoftDelete语法不同) - 本地手册缺章节 / 要最新版 → 切
/thinkphp8-online