thinkphp 6.x 不支持 --api 参数生成 restful 控制器,需手动规范:控制器路径为 api/user、继承 think\controller、路由显式注册 route::resource('user', 'api.user')、方法名严格为 index/read/save/update/delete、每个方法必须用 json() 返回 json 响应。

ThinkPHP 6.x 不提供“一键生成 RESTful 控制器”的功能,所谓 php think make:controller User --api 会直接报错 Unknown option --api。规范编写 RESTful 接口的关键在于手动补全四个核心环节:控制器路径与继承、资源路由显式注册、方法名严格对齐、JSON 响应显式返回。
控制器必须按 api/ 路径生成并继承 think\Controller
不能加 --api 参数,正确命令是:
-
php think make:controller api/User→ 生成app/controller/api/User.php - 类名默认为
UserController,需确认它 继承think\Controller(不是think\facade\Controller) -
think\Controller已禁用视图,无需再写$this->view = null
资源路由必须在 app/route/app.php 中显式注册
别写在 route/api.php,也别套在中间件分组里,否则路由不生效:
- 写法必须是:
Route::resource('user', 'api.User');(注意用点号,不是斜杠或反斜杠) - 映射关系固定:
GET /user → index()、POST /user → save()、GET /user/1 → read($id)、PUT /user/1 → update($id)、DELETE /user/1 → delete($id) - 方法名必须一字不差:只能是 index / read / save / update / delete,写成
show、store、list都不会被识别
每个方法结尾必须显式调用 json() 返回
TP6 不会自动转 JSON,只写 return ['data' => $user]; 会导致空白响应、HTML 模板输出或 500 错误:
- 统一用
json()辅助函数:return json(['code' => 0, 'data' => $user]); - 创建成功建议返回 201 状态码:
return json(['code' => 0, 'data' => $user], 201); - 不要用
Response::create(..., 'json'),json()更简洁且兼容性更好
前端发 PUT/DELETE 需加 X-HTTP-Method-Override 头
浏览器表单和部分 SDK 默认只支持 GET/POST,直接发 PUT/DELETE 会被服务端拒收(405):
- 前端在 POST 请求头中添加:
X-HTTP-Method-Override: PUT(或DELETE) - TP6 路由层原生识别该 Header 并重写请求方法,后端无需额外代码
- 测试时可用 Postman 手动设置该 Header,确保请求能正确命中
update()或delete()
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











