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

Laravel资源路由下Category Controller遇404及方法不存在异常

解决Laravel资源路由引发的BadMethodCallException问题

问题场景

我为Category Controller配置了资源路由:

Route::resource('api/category', CategoryController::class);

对应的CategoryController代码如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use App\Category;

class CategoryController extends Controller
{
    public function pruebas()
    {
        return "controlador de categoria";
    }

    public function index()
    {
        $categories = Category::all();

        return response()->json([
            'code' => 200,
            'status' =>'success',
            'categories' => $categories
        ]);
    }
}

执行php artisan route:list可见路由:

GET|HEAD        api/category ..... category.index › CategoryController@index

但使用Postman测试时返回404,同时抛出异常:

BadMethodCallException: Method App\Http\Controllers\CategoryController::show does not exist. in file /var/www/html/api-rest-laravel/vendor/laravel/framework/src/Illuminate/Routing/Controller.php on line 68

问题原因

  • Laravel的Route::resource默认会生成7个RESTful路由,除了index,还包含create、store、show、edit、update、destroy。你看到的route:list仅显示了index,但实际所有7个路由规则已被注册。
  • 若你访问了类似GET api/category/1的带参数URL,Laravel会尝试调用控制器未实现的show方法,从而抛出异常;而404则是因为你测试的URL与index路由(无参数的GET api/category)不匹配。

解决方案

方案1:仅注册需要的资源路由

如果只需要index对应的路由,可在定义资源路由时指定仅生成该方法的路由:

// 仅保留index方法的路由
Route::resource('api/category', CategoryController::class)->only(['index']);

或排除不需要的路由:

// 排除所有不需要的资源路由
Route::resource('api/category', CategoryController::class)->except(['create', 'store', 'show', 'edit', 'update', 'destroy']);

修改后执行php artisan route:clear清除路由缓存,再测试GET api/category即可正常访问。

方案2:补全缺失的控制器方法

若需要完整的资源路由功能,在CategoryController中添加缺失的show方法(及其他需要的方法):

public function show(Category $category)
{
    return response()->json([
        'code' => 200,
        'status' => 'success',
        'category' => $category
    ]);
}

确保测试URL对应正确路由:

  • 获取所有分类:GET api/category(对应index方法)
  • 获取单个分类:GET api/category/1(对应show方法)

内容的提问来源于stack exchange,提问作者Rafael Hernández

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 04:35:54