ThinkPHP5实现RESTful路由需开启url_route_on并禁用url_common_param,用Route::resource()注册7个标准方法(如GET/POST/PUT/DELETE对应index/save/update/delete),控制器须继承think\Controller且方法名严格匹配约定,否则路由失效。

在ThinkPHP5中实现RESTful路由,需要让同一个URL路径根据HTTP方法(GET/POST/PUT/DELETE)映射到控制器的不同操作方法,而不是靠?_method=xxx或额外参数模拟。
配置开启RESTful支持
打开应用根目录下的app.php配置文件,在url_route_must下方添加:'url_common_param' => false,
并确保'url_route_on' => true已启用。
这一步必须做,否则系统会把所有请求都当作GET处理,【RESTful路由将完全失效】。
定义资源型路由规则
在route/route.php中使用Route::resource()方法声明资源路由:
立即学习“PHP免费学习笔记(深入)”;
Route::resource('api/user', 'api/User');
这行代码会自动注册7个标准RESTful路由:GET /api/user → index,POST /api/user → save,GET /api/user/:id → read,PUT /api/user/:id → update,DELETE /api/user/:id → delete,GET /api/user/:id/edit → edit,GET /api/user/create → create。
编写对应的控制器方法
创建app/api/controller/User.php,继承think\Controller,按约定命名方法:
public function index() { return json(['list' => []]); }
public function read($id) { return json(['id' => $id]); }
public function save() { return json(['status' => 'created']); }
public function update($id) { return json(['id' => $id, 'status' => 'updated']); }
public function delete($id) { return json(['id' => $id, 'status' => 'deleted']); }
注意:save()方法对应POST请求,update()对应PUT,delete()对应DELETE——【方法名不能写错,否则路由无法匹配】。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
手动注册单个RESTful路由(灵活场景)
方法一:用闭包方式显式绑定HTTP方法
Route::rule('api/post/:id', 'api/Post/read')->method('GET');
Route::rule('api/post/:id', 'api/Post/update')->method('PUT');
Route::rule('api/post/:id', 'api/Post/delete')->method('DELETE');
方法二:批量注册,用数组传入method参数
Route::rule('api/comment', ['api/Comment@index', 'api/Comment@save'], ['GET', 'POST']);
这种写法适合非标准资源路径,比如不带复数名词或嵌套路径,比如/api/v1/order/status只响应PATCH和GET。
验证RESTful请求是否生效
第一步:启动内置服务器php think run
第二步:用curl测试不同方法
curl -X GET http://localhost:8000/api/user → 应返回index结果
curl -X POST http://localhost:8000/api/user -d "name=test" → 应触发save方法
curl -X PUT http://localhost:8000/api/user/123 -d "name=updated" → 应触发update方法
如果返回404,请检查控制器类名是否首字母大写、命名空间是否为app\api\controller、路由文件是否被正确加载。


















