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
相关产品推荐
相关产品推荐

