Laravel:使用带有控制器的最小嵌套路由


Laravel: Using minimal nested routes with controllers

我正在使用Laravel 5.2来创建REST API,并且我正在尝试遵循此处记录的API设计的最佳实践。其中一点提到了最小化路径嵌套,如下所示:

在具有嵌套父/子资源关系的数据模型中,路径 可能变得深度嵌套,例如:

/orgs/{org_id}/apps/{app_id}/dynos/{dyno_id}

通过优先将资源定位在根目录来限制嵌套深度 路径。使用嵌套来指示作用域集合。例如,对于 上述情况,其中测功机属于应用程序属于组织:

/orgs/{org_id}
/orgs/{org_id}/apps
/apps/{app_id}
/apps/{app_id}/dynos
/dynos/{dyno_id}

从 https://github.com/interagent/http-api-design/blob/master/requests/minimize-path-nesting.md

使用Laravel的控制器和路由的最佳方法是什么?目前我正在使用:

Route::resource('orgs', 'OrganisationController', ['except' => ['edit', 'create']]);
Route::resource('apps', 'AppController', ['except' => ['edit', 'create']]);

目前,我认为我需要为 orgs/{org_id}/apps/ 添加另一个单一路由,它仅使用 AppController@index 方法。这些只是示例,我有很多资源,因此必须为每个代码重复上述代码。

这是最好的做事方式,还是我不知道的更清洁的替代方案?

谢谢。

是的,您必须注册每个资源。另一种选择是根据某些命名约定自动将路由映射到控制器,但这不是 Laravel 中处理路由的方式。

对于资源需要一小部分可用操作的情况,可以使用only选项:

Route::resource('example', 'ExampleController', ['only' => ['index']]);

或者干脆将其注册为独立路由:

Route::get('example', 'ExampleController@index');