Laravel路由:如何在uri中添加可选参数?

时间:2016-11-10 09:48:06

标签: php rest laravel routing

实现API Rest服务我面临url签名中的方式/位置传递API版本的问题。

通过阅读我决定通过像

这样的版本

http://mydomainservice.tld/api/version/entity ...

关于将版本视为可选版本并解析引用最新API版本的请求,这将是意图:

http://mydomainservice.tld/version/entity ...

问题不是关于如何在API休息中管理/安排版本控制,而是如果有机会实现路由规则以在URI中添加可选参数,那就更多了:

这是有效的:

Route::group(['prefix' => 'api/'], function(){
  Route::get('{v}/subscribers', 'APIRequestController@show');
  Route::get('subscribers', 'APIRequestController@show);
});

对于这两个电话:

http://mydomain.tld/api/subscribers http://mydomain.tld/api/1/subscribers

但我想在一条规则中解决它:

Route::get('{v?}/subscribers', 'APIRequestController@show');

但如果我尝试与以下请求联系,那么第二条规则本身就不会起作用:

http://mydomain.tld/api/subscribers

1 个答案:

答案 0 :(得分:2)

干净利落是不可能的。每个路由参数都需要某种值,当它在URL的末尾时可以为null,但不能在URL的中间。

尽管如此,还有超级肮脏的解决方案: Route::get('{v}subscribers', 'APIRequestController@show')->where('v', '([0-9/]+)?');

现在您可以访问“yourdomain / api / 1 / subscribers”以及“yourdomain / api / subscribers”,但请确保您的控制器中的v参数具有默认值。而且你已经削减了参数附带的斜杠。

最后:不要这样做,最好写两个单独的行并尽可能保持代码干净,而不是这种魔法。