Laravel路由传参调用控制器方法提示不存在如何解决
错误原因
- 路由参数位置书写错误:你将路由参数
{id}写在了控制器方法名的参数位,Laravel会将deleteData/{id}整体当作控制器方法名去查找,自然不存在对应方法,触发报错。 - 同路径同请求方式路由冲突:你在
/atribut/tabHome路径下定义了2个GET类型的路由,Laravel路由匹配遵循从上到下的优先级,排在下方的删除路由永远不会被命中。
修复步骤
1. 修正路由定义
将路由组内的删除路由替换为以下代码:
// 路径新增delete段区分其他路由,参数放在路由路径位,控制器方法名只写方法名 Route::get('delete/{id}', [AtributDashboardController::class, 'deleteData'])->name('deleteData');
2. (可选)优化删除请求安全性
当前用GET请求做删除操作容易被爬虫、预加载功能误触发,建议改为DELETE请求,修改如下:
- 路由修改为:
Route::delete('delete/{id}', [AtributDashboardController::class, 'deleteData'])->name('deleteData');
- 前端Blade模板修改为表单提交:
<form action="{{route('frontend.atribut.tabHome.deleteData', $data->id)}}" method="POST" onsubmit="return confirm('确定要删除该数据吗?')"> @csrf @method('DELETE') <button type="submit" class="btn btn-sm btn-danger">Delete</button> </form>
内容的提问来源于stack exchange,提问作者Ariel Gemilang
相关产品推荐
相关产品推荐

