本文详解 laravel 中因资源路由命名不匹配导致 `route [events.destroy] not defined` 错误的根本原因与正确修复方法,涵盖路由声明、表单提交规范及 blade 模板最佳实践。
该错误的核心在于:你调用了 route('events.destroy', $id),但当前应用中并不存在名为 events.destroy 的路由。问题出在你的 Route::resource() 声明方式上——你注册的是 admin 资源路由:
Route::resource('admin', 'App\Http\Controllers\EventController');这意味着 Laravel 会自动生成如下命名路由(以 admin. 为前缀):
⚠️ 注意:不是 events.destroy,而是 admin.destroy。因此,Blade 中应使
用:
✅ 此写法符合 Laravel 7+ 推荐的语义化表单方法伪造(@method('DELETE')),无需手动添加 _method 隐藏字段。
你的 destroy 方法目前接收 $id 是正确的,但建议增强健壮性:
public function destroy($id)
{
$event = Event::findOrFail($id); // 使用 findOrFail 避免空模型异常
$event->delete();
return redirect()->route('admin.index')->with('success', '活动已成功删除');
}Route::resource('events', 'App\Http\Controllers\EventController');并同步更新所有相关链接(如 route('events.index')、events/{id}/edit 等);
修复后,刷新页面即可正常触发 DELETE 请求并完成数据删除。