【问题标题】:Laravel: Using minimal nested routes with controllersLaravel:使用带有控制器的最小嵌套路由
【发布时间】:2016-05-13 19:58:56
【问题描述】:

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

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

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

通过将资源定位在根目录来限制嵌套深度 小路。使用嵌套来指示范围集合。例如,对于 上面的情况,一个 dyno 属于一个应用程序属于一个组织:

/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 方法。这些只是例子,我有很多资源,所以上面的代码必须为每个重复。

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

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

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

    或简单地将其注册为独立路由:

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

    【讨论】:

      猜你喜欢
      • 2019-12-12
      • 2015-10-05
      • 2017-02-12
      • 2012-11-30
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 2013-07-14
      • 2014-08-11
      相关资源
      最近更新 更多