You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel更新操作报错:PUT/PATCH方法不支持对应路由,请求排查

解决Laravel中PUT/PATCH方法不支持的路由问题

看起来你在Laravel的文章更新功能里碰到了两个头疼的路由报错,我帮你拆解下问题根源,一步步解决:

核心问题:路由参数多写了多余的$符号

你先后遇到的PUT方法不支持、PATCH方法不支持报错,本质是路由定义出了关键错误。看你的路由代码:

Route::put('/articles/{$article}', 'ArticlesController@update');

这里的{$article}是错误写法!Laravel的路由参数不需要加$符号,正确格式应该是{article}。这个小失误会导致路由完全无法匹配你的请求,框架自然就返回“方法不支持”的报错了。

一步步修复方案

1. 先修正路由定义

把路由改成正确的参数格式:

Route::put('/articles/{article}', 'ArticlesController@update');

2. 优化控制器方法(可选但更规范)

你的控制器现在是通过$id手动查找模型,其实Laravel有更便捷的路由模型绑定,直接注入Article实例,既简洁又能自动处理模型不存在的情况:

public function update(Article $article){
    $article->title = request('title');
    $article->excerpt = request('excerpt');
    $article->body = request('body');
    $article->save();
    return redirect('/articles/'. $article->id);
}

这样写的话,Laravel会自动根据路由里的{article}参数找到对应的文章,不用再手动find($id),如果找不到还会自动返回404页面,比原来的写法更健壮。

要是你想继续用原来的$id写法也没问题,只要路由参数修正后,控制器里的$id能正常接收参数就行,不过记得加个判断防止find($id)返回null:

public function update($id){
    $article = Article::find($id);
    // 防止找不到文章的情况
    if (!$article) {
        abort(404);
    }
    $article->title = request('title');
    $article->excerpt = request('excerpt');
    $article->body = request('body');
    $article->save();
    return redirect('/articles/'. $article->id);
}

3. 确认表单代码没问题

你的Blade表单写法是正确的:

<form method="POST" action="/articles/{{$article->id}}" >
    @csrf
    @method('PUT')
    <!-- 这里放你的表单输入字段 -->
</form>

@method('PUT')会生成一个隐藏字段,把POST请求转换成PUT请求,和你修正后的路由方法是匹配的。

额外排查小技巧

如果修复后还是有问题,试试这两步:

  • 清除路由缓存:在终端运行php artisan route:clear,确保新的路由配置生效;
  • 检查路由冲突:看看有没有其他路由(比如GET路由)用了相同的/articles/{article}路径,导致请求被错误匹配。

内容的提问来源于stack exchange,提问作者dzstr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:12:33