Laravel项目中DELETE请求被识别为GET的问题求助
解决Laravel删除模态框的GET方法不支持问题
核心问题分析
你的代码存在几个关键问题,导致请求被错误识别为GET:
- 动态表单的Blade指令未解析:
@csrf和@method("DELETE")是服务器端Blade指令,直接写在JS字符串里不会被解析为隐藏输入框,导致Laravel无法识别DELETE请求方法。 - HTML语法错误:表单代码存在多余字符和引号错误,导致表单渲染异常。
- JS选择器转义错误:选择器中的转义字符导致submit事件未正确绑定,可能触发表单默认提交行为。
步骤1:修复动态表单生成逻辑
由于表单是JS动态生成的,不能直接使用Blade指令,需手动添加CSRF令牌和DELETE方法字段:
- 确保页面头部已包含CSRF meta标签(Laravel默认已添加):
<meta name="csrf-token" content="{{ csrf_token() }}">
- 修改JS中生成表单的代码,替换
@csrf和@method为手动创建的隐藏输入框:
// 获取CSRF令牌 var csrfToken = $('meta[name="csrf-token"]').attr('content'); // 生成表单HTML var formHtml = '<form id="delete-form-' + dataResult.data[i].id + '" action="/inventario/' + dataResult.data[i].id + '" method="POST" class="d-inline">' + '<input type="hidden" name="_token" value="' + csrfToken + '">' + '<input type="hidden" name="_method" value="DELETE">' + '<div class="modal-footer">' + '<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancelar</button>' + '<button class="btn btn-primary" type="submit" style="padding-left: 6px">Aceptar</button>' + '</div>' + '</form>';
注意:删除了原代码中
Cancelar按钮后的多余+号,修复了Aceptar按钮的引号错误。
步骤2:修复JS事件绑定选择器
将选择器中的转义字符修正为标准格式,确保事件能正确绑定:
$(document).on('submit', 'form[id^="delete-form-"]', function(e) { e.preventDefault(); console.log('Entrado al submit del form de eliminar disco'); var form = $(this); var url = form.attr('action'); $.ajax({ type: 'POST', url: url, data: form.serialize(), success: function(data) { form.closest('tr').remove(); Swal.fire({ icon: 'success', title: 'Disco eliminado', showConfirmButton: false, timer: 1500 }); }, error: function(jqXHR, textStatus, errorThrown) { Swal.fire({ icon: 'error', title: 'Error al eliminar disco', showConfirmButton: false, timer: 1500 }); } }); });
步骤3:调整控制器destroy方法的响应
由于是AJAX请求,返回JSON响应而非重定向,避免不必要的页面跳转:
public function destroy(Inventario $inventario) { // 修正:根据外键关联删除图片(假设ImagenInventario的外键是inventario_id) ImagenInventario::where('inventario_id', $inventario->id)->delete(); $inventario->delete(); return response()->json(['success' => true], 200); }
原代码中
ImagenInventario::findOrFail($inventario->id)逻辑错误,会查找ID等于Inventario ID的图片,应改为根据外键关联删除。
步骤4:验证路由配置
确保你的web.php路由中DELETE路由正确:
Route::delete('/inventario/{id}', [InventarioController::class, 'destroy'])->middleware('auth');
完成以上修改后,请求会正确携带_method=DELETE参数,Laravel将识别为DELETE请求,解决方法不支持的错误。
内容的提问来源于stack exchange,提问作者Raúl García
相关产品推荐
相关产品推荐

