Laravel 5.6.14出现405 Method Not Allowed错误的技术求助
排查Laravel API的405 Method Not Allowed错误
你的API路由存在几个关键问题,直接导致了405错误(HTTP请求方法不匹配或目标路由不存在),我来帮你一步步梳理解决:
核心问题定位
你的PUT更新路由有两个明显错误:
- 缺少文章ID参数:更新单篇文章必须指定具体的文章ID,否则Laravel无法定位要操作的资源
- 错误绑定控制器方法:
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会自动完成参数绑定工作。
额外必要检查
确保控制器存在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); }确认请求的URL和方法正确
更新文章时,你的请求必须满足:- HTTP方法:
PUT(或PATCH) - 请求URL:
/article/你的文章ID(对应手动修正的路由)或/articles/你的文章ID(对应资源路由)
- HTTP方法:
完成以上调整后,你的405错误应该就能顺利解决了。
内容的提问来源于stack exchange,提问作者aslamdoctor
相关产品推荐
相关产品推荐

