TP6.0 构建 RESTful 风格的 DELETE 与 PUT 请求【规范】

陌雪酱_6629

陌雪酱_6629

2026-07-17

526人浏览

原创

要在ThinkPHP 6.0中正确构建RESTful风格的DELETE与PUT请求,必须配置HiddenMethodFilter中间件、定义匹配路由、编写签名一致的控制器方法,并采用POST+_method模拟或原生AJAX/fetch提交。

tp6.0 构建 restful 风格的 delete 与 put 请求【规范】

要在 ThinkPHP 6.0 中正确构建 RESTful 风格的 DELETE 与 PUT 请求,必须绕过浏览器原生仅支持 GET/POST 的限制,同时确保路由、控制器方法、表单提交和参数传递四者严格对齐,否则请求会被拦截或误判为非法。

配置隐藏方法过滤器

ThinkPHP 6.0 默认不启用 HiddenMethodFilter,需手动注册中间件以支持 _method 参数解析。

打开 app/middleware.php,在全局中间件数组中追加:

【必须放在 hinkmiddlewareValidatePostSize::class 之后、 hinkmiddlewareParseToken::class 之前】

'think\middleware\HiddenMethodFilter' => hinkmiddlewareHiddenMethodFilter::class,

这一步不可跳过,否则 POST 携带 _method=delete 将被直接忽略,不会触发 DELETE 路由匹配。

定义 RESTful 路由

在 route/app.php 中声明资源路由或显式路由,二者选其一即可。

方法一:使用资源路由(推荐)

Route::resource('user', 'controller/User');

该语句自动生成 DELETE /user/:id → User::delete() 和 PUT /user/:id → User::update() 等标准映射。

方法二:手动定义(更可控)

Route::put('user/:id', 'controller/User/update')->bind('user');<br>Route::delete('user/:id', 'controller/User/delete')->bind('user');

【id 必须作为 URL 参数而非 query string 传入,否则无法匹配绑定规则】

编写控制器方法

控制器方法签名必须与路由定义严格一致,且需启用资源注入。

ThinkPHP5.1企业站点快速开发-源码课件
ThinkPHP5.1企业站点快速开发-源码课件

ThinkPHP5.1企业站点快速开发

下载

第一步:确认控制器继承 hinkController 或 hink estController

第二步:在 app/controller/User.php 中定义:

public function delete($id) {<br>  // $id 已由框架自动解析并注入,无需 request()->param('id')<br>  return json(['status' => 'deleted', 'id' => $id]);<br>}

public function update($id) {<br>  // PUT 请求体中的数据需用 input('put.') 获取,不能用 input('post.')<br>  $data = input('put.');<br>  Db::name('user')->where('id', $id)->update($data);<br>  return json(['status' => 'updated', 'id' => $id]);<br>}

注意:PUT 请求默认不解析表单数据,必须用 input('put.') 或 request()->put(),否则 $data 为空数组。

前端表单提交方式

浏览器不支持原生 DELETE/PUT 表单提交,必须用 POST + _method 隐藏字段模拟。

方法1:传统 HTML 表单(适用于无 JS 场景)



  
  

方法2:AJAX 提交(推荐,可避免页面跳转)

$.ajax({<br>  url: '/user/123',<br>  type: 'DELETE',<br>  dataType: 'json',<br>  success: function(res) { console.log(res); }<br>});

方法3:使用 fetch API(现代浏览器)

fetch('/user/123', { method: 'DELETE' })<br>  .then(r => r.json())<br>  .then(console.log);

若用 AJAX/fetch 直接发 DELETE/PUT,无需配置 HiddenMethodFilter,也不需要 _method 字段——该中间件只处理 POST 模拟场景。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

thinkphp

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

2025.11.26

564

16

数据库Delete用法
数据库Delete用法

数据库Delete用法:1、删除单条记录;2、删除多条记录;3、删除所有记录;4、删除特定条件的记录。更多关于数据库Delete的内容,大家可以访问下面的文章。

2023.11.13

3391

4

drop和delete的区别
drop和delete的区别

drop和delete的区别:1、功能与用途;2、操作对象;3、可逆性;4、空间释放;5、执行速度与效率;6、与其他命令的交互;7、影响的持久性;8、语法和执行;9、触发器与约束;10、事务处理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.29

1025

3

DBeaver怎么导入数据
DBeaver怎么导入数据

DBeaver数据导入专题,整理Excel、CSV、SQL、TXT等常见文件的数据导入方法,涵盖目标数据库选择、数据表创建、字段映射、数据类型设置及导入参数配置等操作,帮助用户将本地文件中的数据写入数据库,并了解批量导入、重复数据处理和导入失败等常见问题的解决方法。

2026.11.05

0

12

DBeaver安全防护教程大全
DBeaver安全防护教程大全

DBeaver安全防护专题,围绕数据库连接安全、账号密码保护和访问权限管理展开,整理SSL/TLS加密连接、SSH隧道、数据库凭据保存及证书验证等配置方法,同时介绍敏感信息保护、远程连接风险和高权限账号使用等注意事项,帮助用户提高数据库日常管理的安全性。

2026.11.05

0

12

DBeaver连接创建与配置教程
DBeaver连接创建与配置教程

本专题聚焦DBeaver数据库连接配置与管理,覆盖从新建连接、选择数据库类型到填写连接参数和验证连接的完整流程。针对MySQL、PostgreSQL、SQL Server等常见数据库,整理相应的连接设置方法,并提供驱动缺失、认证失败和连接异常等问题的排查方向。

2026.11.04

0

16

XORM框架结构体映射与表结构同步
XORM框架结构体映射与表结构同步

本专题围绕XORM框架的结构体映射展开,说明表名与字段的命名策略、xorm标签常用属性、主键自增与时间字段自动填充,并演示Sync2自动建表、增量字段升级、索引声明与反向生成结构体的完整流程。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

15

XORM框架安装配置与数据库连接
XORM框架安装配置与数据库连接

本专题聚焦XORM框架的配置与连接环节,拆解MySQL、PostgreSQL、SQLite、SQL Server的DSN写法与驱动选择,讲清连接池参数、多数据源拆分、读写分离与超时重连的处理方式,并补充容器与兼容数据库的适配经验。

2026.11.04

0

16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程