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

时间:2016-02-04 09:24:17

标签: php api laravel laravel-5 laravel-routing

我使用Laravel 5.2创建REST API,并且我尝试遵循API设计的最佳做法documented here。其中一点提到最小化路径嵌套,如下所示:

  

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

     

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

     

通过优先在根位置查找资源来限制嵌套深度   路径。使用嵌套来指示范围集合。例如,对于   dyno属于app的上述情况属于org:

/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方法。这些仅是示例,我有很多资源,因此必须为每个代码重复上述代码。

这是最好的做事方式,还是有一种我不知道的更清洁的选择?

感谢。

1 个答案:

答案 0 :(得分:0)

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

如果资源需要一小部分可用操作,您可以使用only选项:

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

或者只是将其注册为独立路线:

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