Laravel 8删除数据库数据时路由不支持DELETE方法报错如何解决
Laravel 8 删除请求路由不支持报错排查
报错详情
The DELETE method is not supported for this route. Supported methods: GET, HEAD. -
报错原因及解决办法
- 路由顺序冲突
Laravel路由会按照定义顺序自上而下匹配,如果你在Route::delete('/projects/{id}', [ProjectController::class, 'destroy'])之前定义了URI匹配规则相同的GET路由(比如Route::get('/projects/{id}', xxx)),DELETE请求会优先触发前面的GET路由,导致方法不匹配。
解决办法:将DELETE路由移到同路径GET路由之前。你可以执行php artisan route:list命令查看已注册的路由列表,确认DELETE路由存在且没有被其他路由覆盖。 - 表单语法错误
你贴出的表单代码开头缺失<符号,若实际代码也存在该问题,会导致HTML解析失败,表单默认以GET方式提交请求,无法匹配DELETE路由。
修正后的表单代码如下:<form action="/projects/{{ $project->id }}" method="POST"> @csrf @method('DELETE') <button>Finish your project</button> </form> - 路由缓存未更新
如果你之前开启过路由缓存,修改后的路由不会自动同步到缓存中,会导致请求无法匹配到新定义的DELETE路由。
解决办法:执行php artisan route:clear清除路由缓存即可,开发环境下不建议开启路由缓存,避免每次修改路由都要手动清缓存。 - 硬编码路径出错
手动写的表单提交地址可能出现拼写错误、前缀缺失/多余的问题,导致匹配到其他GET路由。
解决办法:使用路由命名绑定提交地址,先给路由设置别名:
再将表单的action属性替换为路由生成方法:Route::delete('/projects/{id}', [ProjectController::class, 'destroy'])->name('projects.destroy');<form action="{{ route('projects.destroy', $project->id) }}" method="POST">
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

