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

Laravel 5.6.14出现405 Method Not Allowed错误的技术求助

排查Laravel API的405 Method Not Allowed错误

你的API路由存在几个关键问题,直接导致了405错误(HTTP请求方法不匹配或目标路由不存在),我来帮你一步步梳理解决:

核心问题定位

你的PUT更新路由有两个明显错误:

  1. 缺少文章ID参数:更新单篇文章必须指定具体的文章ID,否则Laravel无法定位要操作的资源
  2. 错误绑定控制器方法:store方法是用来处理创建资源的POST请求,更新资源应该使用专门的update方法

修正方案一:手动调整单个路由

把你的api.php路由代码修改为:

// 列出所有文章
Route::get('articles', 'ArticleController@index');
// 查看单篇文章
Route::get('article/{id}', 'ArticleController@show');
// 创建新文章
Route::post('article', 'ArticleController@store');
// 更新文章 - 修正:添加ID参数,绑定到update方法
Route::put('article/{id}', 'ArticleController@update');
// 删除文章
Route::delete('article/{id}', 'ArticleController@destroy');

修正方案二:使用Laravel资源路由(推荐)

Laravel提供了resource路由可以自动生成符合RESTful规范的API路由,大幅简化代码编写:

// 自动生成index(GET)、show(GET)、store(POST)、update(PUT/PATCH)、destroy(DELETE)路由
Route::resource('articles', 'ArticleController')->only([
    'index', 'show', 'store', 'update', 'destroy'
]);

使用资源路由后,路由URI会变成复数形式(比如/articles/{article}),更符合RESTful最佳实践,同时Laravel会自动完成参数绑定工作。

额外必要检查

  1. 确保控制器存在update方法
    打开ArticleController.php,添加或完善update方法:

    public function update(Request $request, $id)
    {
        // 根据业务需求验证请求数据
        $validatedData = $request->validate([
            'title' => 'required|string|max:255',
            'content' => 'required|string',
        ]);
    
        // 查找并更新文章,找不到则自动返回404
        $article = Article::findOrFail($id);
        $article->update($validatedData);
    
        return response()->json($article);
    }
    
  2. 确认请求的URL和方法正确
    更新文章时,你的请求必须满足:

    • HTTP方法:PUT(或PATCH)
    • 请求URL:/article/你的文章ID(对应手动修正的路由)或/articles/你的文章ID(对应资源路由)

完成以上调整后,你的405错误应该就能顺利解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:08:23