【问题标题】:Laravel: apiResouce route not found issueLaravel:未找到 apiResouce 路由问题
【发布时间】:2020-04-12 09:28:28
【问题描述】:

在我的 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 时,它返回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.');
    }

    ...
}

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

我不想包含额外的代码,特别是对于 laravel 已经提供的相同功能。

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

请帮忙,谢谢。

【问题讨论】:

    标签: laravel api http-status-code-404


    【解决方案1】:

    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 并排除您不想要的那些

    【讨论】:

      猜你喜欢
      • 2016-02-27
      • 2022-07-18
      • 2018-12-27
      • 2019-07-13
      • 2019-02-20
      • 2020-10-26
      • 2014-06-25
      • 2019-09-02
      相关资源
      最近更新 更多