2016-11-10 75 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