(api)资源组路由

时间:2018-04-19 18:42:49

标签: laravel laravel-5

在通过资源分组路线时:

Route::resource('books/{book}/catalog', 'CatalogController', ['names' => [
    'index' => 'catalog.index',
    'store' => 'catalog.store',
    'update' => 'catalog.update',
    'destroy' => 'catalog.destroy',
], 'except' => ['create', 'edit', 'show']]);

route:list命令输出:

DELETE    | api/v1/books/{book}/catalog/{catalog}
PUT|PATCH | api/v1/books/{book}/catalog/{catalog}

但是我希望:

DELETE    | api/v1/books/{book}/catalog
PUT|PATCH | api/v1/books/{book}/catalog

在分组时如何获得结果的任何建议,在DELETE和PUT | PATCH路由中没有额外的{catalog}参数?

2 个答案:

答案 0 :(得分:0)

为什么你不只是使用apiResource方法? 它使它变得如此整洁。

Route::apiResource('catalog', 'CatalogController');

答案 1 :(得分:0)

我假设书籍和目录之间存在一对一的关系,这就是为什么您不需要catalog参数来确定要删除/更新的目录。

如果是这种情况,您正在寻找的是单一资源路由。 Laravel默认不提供此功能。

我创建了一个将此功能添加到Laravel的包:shiftonelabs/laravel-singular-resource-routes

但是,您需要进行一项更改,即将index路由更改为show路由。根据定义,奇异资源是单数的,因此index没有一组资源,show只有一个资源。

安装软件包后,您需要更新路由以包含'singular' => true选项(并更改index路由):

Route::resource('books/{book}/catalog', 'CatalogController', [
    'names' => [
        'show' => 'catalog.show',
        'store' => 'catalog.store',
        'update' => 'catalog.update',
        'destroy' => 'catalog.destroy',
    ],
    'except' => ['create', 'edit'],
    'singular' => true,
]);