ThinkPHP用Route::resource()开发RESTful接口的核心是规范路由注册与严格控制器约定:必须在app/route/app.php中调用Route::resource('users','api.User'),控制器继承think\Controller并仅实现index/save/read/update/delete七个方法(不可用show/store等别名),参数需手动获取,响应须显式json()返回并设状态码。

ThinkPHP 用 Route::resource() 写 RESTful 接口,核心就两点:路由注册要规范,控制器方法名和逻辑要严丝合缝。不是写一堆 get/post 就算 RESTful,而是靠约定自动绑定 HTTP 动词、URI 路径和控制器动作。
路由注册必须写对位置和写法
在 app/route/app.php(或你实际使用的路由文件)里注册,开头加 use think\facade\Route;:
-
Route::resource('users', 'api.User');——users是 URL 前缀(如/users),api.User是完整类名(命名空间+类名) - 若需版本前缀,必须用分组:
Route::prefix('api/v1')->group(function () { Route::resource('users', 'api.User'); }); - 不能写成
Route::resource('api/v1/users', 'api.User'),否则控制器无法解析路径段 - 避免和其他显式路由冲突,比如已有
Route::get('users', ...),会提前截断资源路由匹配
控制器必须继承 think\Controller 并只写7个方法
控制器类必须继承 think\Controller(不是 BaseController 或 RestController),且只实现以下七个方法,拼写、大小写、参数一个都不能错:
-
index()→ GET /users(列表) -
save()→ POST /users(创建,不是 store) -
read($id)→ GET /users/:id(详情,不是 show) -
update($id)→ PUT 或 PATCH /users/:id(更新) -
delete($id)→ DELETE /users/:id(删除) -
create()和edit()是面向表单的,在纯 API 场景建议禁用或直接返回 404
少一个、错一个(比如写成 show($id)),请求就会进错方法或报 Method Not Found。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
参数和数据得自己手动取,别等框架塞给你
资源路由不自动解析请求体,也不帮你调 input() 或 param():
-
save()中:表单提交用$this->request->post();JSON 提交需设Content-Type: application/json,再用$this->request->param() -
read($id)、update($id)、delete($id)的$id是自动注入的,但其他查询参数(如?with=roles)仍需$this->request->param('with') - 别用
input('post.name')或input('put.'),TP6/8 推荐统一用param()处理所有请求数据
响应必须显式返回 JSON 并设状态码
ThinkPHP 不会默认返回 JSON,每个方法结尾都要手动调 json():
- 成功创建资源:
return json($data, 201); - 获取单条或列表:
return json($data);(默认 200) - 资源不存在:
return json(['error' => 'Not Found'], 404); - 前端发不了原生 PUT/DELETE?加请求头
X-HTTP-Method-Override: PUT,TP6/8 原生支持重写
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










