Laravel使用resource路由提示DELETE方法不支持该如何解决?
Laravel 删除请求方法不支持报错排查方案
- 第一步:校验路由注册是否正确
执行命令php artisan route:list,查看product.destroy路由的注册信息,正常Resource路由生成的销毁接口应该是DELETE请求方法,URI规则为product/{product}。如果列表中没有对应DELETE路由,检查web.php中Resource路由是否被其他同名路由、路由组前缀或中间件规则覆盖。 - 第二步:检查Blade指令是否正常解析
打开浏览器开发者工具查看表单页面源代码,确认@method('DELETE')和@csrf指令已经被正常解析为两个隐藏input字段:_method值为DELETE,_token为自动生成的csrf校验值。如果没有生成对应字段,检查当前模板文件后缀是否为.blade.php,指令是否存在拼写错误。 - 第三步:验证路由参数传递是否正确
查看表单的action属性生成的链接是否符合规则,正常格式应为/product/{产品ID}(比如/product/1)。如果链接中没有产品ID、ID为空或者参数名错误,会导致路由匹配失败,被其他POST规则拦截触发报错。 - 第四步:清理路由缓存
如果你开启了路由缓存,执行php artisan route:clear清除缓存后重试,生产环境修改路由配置后必须清理缓存才会生效。 - 第五步:检查Web服务器配置
部分Nginx/Apache的默认配置会过滤DELETE、PUT这类非GET/POST的请求方法,确认你的服务器配置允许DELETE方法请求,没有做额外的请求重定向或方法改写。
如果以上排查都没有问题,可以在Resource路由前面单独注册销毁路由作为临时解决方案:
// 放在Resource路由之前优先匹配 Route::delete('product/{product}', [ProductController::class, 'destroy'])->name('product.destroy'); Route::resource('product', ProductController::class);
内容的提问来源于stack exchange,提问作者Md Musab Mahmud
相关产品推荐
相关产品推荐

