【问题标题】:Handling routes in laravel在 laravel 中处理路由
【发布时间】:2015-06-12 12:12:21
【问题描述】:

我有两个不同版本的 api,v1 和 v2,它们都有相同的端点。但是我处理会话的方式不同,处理路由文件的干净方式是什么,以及知道用户正在使用哪个 api 版本。我正在使用 laravel 4.1

示例路线:

/v1/getsome/1
/v2/getsome/1

提前致谢

【问题讨论】:

  • 这很干净。您是否遇到了一些错误,被卡在某个地方等等?
  • 似乎这可以用一个控制器来解决。我会将版本作为参数传递。例如:Route::get('getsome/{id}/{version}/', 'APIController@getsome()');
  • @brokekidweb 因为我需要调用相同的控制器和函数,这只是会话中的一些问题
  • @DamienPirsy 我不会如何实现路由文件,比如编写所有以 v1 和 v2 为前缀的路由,我不想那样做
  • @ezpura 编辑了我的评论,可以吗? Route::get('getsome/{id}/{version}/', 'APIController@getsome()')->where('version', '[1-2]+'); 会更具体。

标签: php laravel


【解决方案1】:

v1/v2 很容易成为占位符,因此将来您可以更改/增加版本控制而不破坏 api

Route::get('{version}/getSome/{id}', ['as' => 'getstome', 'uses' => 'controller@method');

然后你在 cotnroller 的方法中处理版本。

或者你可以使用前缀(我更喜欢这个),所以你不需要在你的路由中指定版本:

Route::group(['prefix' => 'v1'], function(){
  Route::get('getsome/{id}', ....);
};

【讨论】:

  • 嘿前缀看起来更干净,但是如何处理不同的版本而不重复
  • 简单如何使用多个前缀?
  • 使用前缀并将中间件添加到 v2 路由中,该中间件将在会话问题进入控制器之前处理它。
  • @user3158900 如果你在谈论 L5 中间件,OP 是 4.1
  • 那么它就是一个过滤器。
【解决方案2】:

在路由中使用版本作为参数,然后在控制器中处理版本。

    Route::get('getsome/{id}/{version}/', 'APIController@getsome()')->where('version', '[1-2]+');

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 2017-08-29
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多