通八洲科技

Laravel 资源路由中 destroy 方法未定义的解决方案

日期:2026-01-02 00:00 / 作者:心靈之曲

本文详解 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 中应使用:

@csrf @method('DELETE')
✅ 此写法符合 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', '活动已成功删除');
}

? 关键注意事项总结:

修复后,刷新页面即可正常触发 DELETE 请求并完成数据删除。