Laravel9+Inertia+Vue3中记录无法删除且返回303状态码问题
问题解决:Laravel 9 + Inertia + Vue3 删除记录失败且返回303状态码
核心问题分析
- 303状态码并非异常:HTTP规范中,DELETE请求后的重定向应返回303(See Other),而非302。Laravel的
redirect()->back()在处理DELETE请求时会自动返回303,这是符合标准的行为,无需担心。 - 记录未删除的根本原因:路由模型绑定参数名不匹配,导致控制器拿到的是空的模型实例,执行
delete()不会删除任何数据。
具体修复步骤
1. 修正控制器的路由模型绑定参数名
Laravel路由模型绑定依赖参数名与控制器变量名完全匹配。你的Route::resource('dailyrevenue', ...)生成的destroy路由参数是{dailyrevenue},但控制器方法中用了$revenue,导致无法正确注入对应模型实例。
修改DailyRevenueController.php的destroy方法:
public function destroy(DailyRevenue $dailyrevenue) { $dailyrevenue->delete(); return redirect()->back(); }
2. 简化Inertia请求与模板代码
现有代码存在冗余:Inertia.delete本身已发送DELETE请求,无需重复指定method: 'delete';模板中的form和_method隐藏域也没必要,直接用按钮绑定点击事件即可。
修改Vue3逻辑:
const submit = function (id) { const check = confirm("Are you sure to delete?") if (check) { Inertia.delete(route('dailyrevenue.destroy', id)) } }
修改模板代码:
<template #cell(actions)="{item: tax}"> <button @click="submit(tax.id)">Delete</button> </template>
验证
修改后,路由模型绑定会正确找到对应记录并执行删除操作,303状态码会被Inertia正常处理,页面自动重定向回上一页并更新数据。
内容的提问来源于stack exchange,提问作者Pradeep Sapkota
相关产品推荐
相关产品推荐

