Laravel: apiResouce 路由未找到问题

Laravel: apiResouce route not found issue

在我的 laravel 应用程序中,我使用 apiResponse 作为路由。但是,在发出 api 请求时,我收到 404 not found 错误。这是一个例子:

Route::group(['prefix' => 'v1'], function() {
    /**
     * Categories
     */
    Route::group([ 'prefix' => 'categories' ], function() {
        Route::apiResource('/', 'v1\CategoryController')->except(['destroy', 'show']);

        Route::get('/edit/{category}', 'v1\CategoryController@edit');
        // Route::patch('/{category}', 'v1\CategoryController@update');
        Route::patch('/status/{category}/{status}', 'v1\CategoryController@status');
    });
});

当我通过 patch 方法访问 update api 时,它 returns 404 not found

CategoryController.php

...

use Illuminate\Http\Request;

use App\ApiModels\v1\Category;

class CategoryController extends Controller
{
    ...

    public function update(Request $Request, $category)
    {
        # models
        $Category = new Category();

        # accessing methods
        if(($querySubmit = $Category->update($Request->all(), $category))['success'] == false)
        {
            return $this->response([
                'class' => 'alert-danger'
            ], false, $this->parentErrors($querySubmit));
        }

        return $this->response([], true, 'Category has been saved successfully.');
    }

    ...
}

但是,如果我取消注释 update 路由的 patch 方法,它就会开始工作。因为它开始使用新路由,完全忽略 restful 控制器路由。

我不想包含额外的代码,特别是为了 laravel 已经给出的相同功能。

如何解决这个问题...?

请帮忙,谢谢。

resourceapiResource 方法用于资源。您没有传递资源名称,从技术上讲,这是应该传递给它们的名称,也没有传递以资源名称结尾的 URI。你可能想要这样的东西:

Route::group(['prefix' => 'v1', 'namespace' => 'v1'], function() {
    Route::patch('categories/{category}/{status}', 'CategoryController@status');

    Route::resource('categories', 'CategoryController')
        ->except(['destroy', 'show', 'create']);
});

那么你的路线将是:

GET         api/v1/categories                      index
POST        api/v1/categories                      store
GET         api/v1/categories/{category}/edit      edit
PUT/PATCH   api/v1/categories/{category}           update

你想要 edit 路线意味着你可能想使用 resource 而不是 apiResource 并且只排除你不想要的那些