You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中method="POST"与@method('PUT')的区别及使用场景

Laravel中@method('PUT')的作用与使用场景

在Laravel项目中,使用method="POST"的表单更新记录时操作失败,添加@method('PUT')后记录更新恢复正常,下面详细解释这个指令的作用及适用场景:

一、@method('PUT')的核心作用

HTML原生表单仅支持GET和POST两种请求方法,但Laravel遵循RESTful架构规范,更新资源通常对应PUT(全量更新)或PATCH(部分更新)请求。

@method('PUT')是Laravel的Blade模板指令,它会自动生成一个隐藏的表单字段:

<input type="hidden" name="_method" value="PUT">

Laravel的路由系统会识别这个_method字段,将原本的POST请求“伪装”成PUT请求,从而匹配到路由定义中对应的PUT类型更新路由(比如Route::put('/students/{student}', [StudentController::class, 'update']))。

如果没有这个指令,POST请求会无法匹配PUT类型的路由,导致更新操作失败。

二、使用场景

  • 更新现有资源:当你需要调用Laravel中定义的PUT或PATCH类型路由时,必须通过@method()指令伪装请求方法,否则路由无法匹配
  • 删除资源:同理,HTML表单不支持DELETE方法,删除资源时需要用@method('DELETE')来伪装请求,匹配Route::delete()定义的路由
  • 遵循RESTful规范:让请求方法与操作语义一致(创建用POST、更新用PUT/PATCH、删除用DELETE),使代码结构更清晰、符合行业规范

代码对比

无法正常工作的代码

<form action="{{ route('student.update',$studentData->id) }}" method="POST">
...
</form>

说明:该表单发送纯POST请求,无法匹配student.update对应的PUT路由,导致更新失败

正常工作的代码

<form action="{{ route('student.update',$studentData->id) }}" method="POST">
    @csrf
    @method('PUT')
    ...
</form>

说明:@csrf用于防止CSRF攻击,@method('PUT')将POST请求伪装为PUT请求,成功匹配更新路由

内容的提问来源于stack exchange,提问作者Muhammad Bilal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 08:45:34