2016-11-10 77 views
0

实现API Rest服务我正面临着url签名如何/在哪里通过API版本的问题。Laravel路由:如何在uri中添加可选参数?

通过阅读周围,我决定通过的版本一样

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

关于治疗版本可选的解析请求指为最新版本的API,这将是意向:

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

的问题不是如何管理/安排API休息版本,但更多的,如果有实现路由规则前面加上一个可选比肩的机会ameter在URI:

这是工作:

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

对于像两个电话:

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

但我想解决它在一个单一的规则:

Route::get('{v?}/subscribers', '[email protected]'); 

但是这第二条规则w本身,如果我尝试on't工作,请求等伸手:

http://mydomain.tld/api/subscribers

回答

2

这是不可能做到干净。每个路由参数都需要某种类型的值,它在URL的末尾可以为空,但不在URL的中间。

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

您现在可以访问“YOURDOMAIN/API/1 /用户”以及“YOURDOMAIN/API /用户”,但要确保你有默认值在您的控制器中输入v参数。而且你也削减了参数中的斜线。

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

+0

感谢您的确认,以及肮脏的解决方案:-) – koalaok