thinkphp 6.x 的 make:controller 命令不支持 --api 或 --resource 参数,运行 php think make:controller user --api 会报错「unknown option --api」;唯一可行方式是 php think make:controller api/user,生成路径对应路由前缀,但需手动修改类名、禁用视图、显式注册资源路由、严格命名方法、手动返回 json,且客户端需通过 x-http-method-override 模拟 put/delete。

ThinkPHP 6.x 没有 --api 或 --resource 参数,直接运行 php think make:controller User --api 会报错 Unknown option --api——这不是你配置错了,是命令压根不支持。
think make:controller 命令不支持 --api 参数
官方命令只负责建文件和类壳,不生成 REST 方法体,也不处理返回格式。所谓“一键生成 API 控制器”在 TP6 是不存在的。
-
php think make:controller api/User是唯一可行的命名方式,它会生成app/controller/api/User.php,路径自动对应路由前缀 - 生成后必须手动改类名(如
UserController extends BaseController),并确保BaseController已禁用视图:$this->view = null;或继承think\Controller - 别指望它写出
index()、save()这些方法——空文件就是最终结果
Route::resource() 必须显式注册且位置正确
资源路由不会自动生效,必须在 app/route/app.php(不是 api.php)里写明,且不能被中间件分组包裹,否则映射失败。
- 写法示例:
Route::resource('user', 'api.User');—— 注意是api.User,不是api/User - 控制器方法名必须严格为
index、read、save、update、delete,写成list或show就不会被识别 - 如果用了多应用模式,要确认
api是已在app/multi.php中注册的合法应用名,否则路由解析直接 404
返回 JSON 不是默认行为,必须手动加
即使路由和方法都对了,不显式调用 json(),响应可能是空内容、HTML 模板或 500 错误。
- 每个方法结尾都要写类似:
return json(['code' => 0, 'data' => $data]); - 创建成功建议用
return json(['code' => 0], 201);显式返回 201 状态码 - 不要依赖
Response::create(..., 'json'),TP6 推荐直接用json()辅助函数,更简洁且兼容性好
客户端发 PUT/DELETE 请求常 405,得配 X-HTTP-Method-Override
浏览器表单或某些前端 SDK 默认只支持 GET/POST,发不出原生 PUT/DELETE,服务端会直接拒绝。
- 前端需在 POST 请求头中加:
X-HTTP-Method-Override: PUT - 后端无需额外代码——TP6 路由层原生识别该 header 并重写请求方法
- 测试时用 curl 验证最可靠:
curl -X POST -H "X-HTTP-Method-Override: PUT" http://localhost/api/user/123
真正卡住人的从来不是某个命令怎么敲,而是路由注册、控制器路径、方法命名、JSON 返回这四者没对齐——少一个,接口就静默失败,连日志都不报错。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











