2016-01-06 59 views
0

我想創建一個路線routes.php可以處理可選的無限子路徑。Laravel路線與一個可選的子路徑

Route::get('/path/{url}', function($url){ 
    echo $url; 
}); 

URL的可以是以下:

/path/part1 
/path/part1/part2 
/path/part1/part2/part3 
etc. 

但因爲URL中的一個子路徑不匹配的/,所以什麼也沒發生。 (當然,echo $url僅用於測試)。

我現在用的一招避免這種情況,通過使用~代替/的子路徑,然後取代他們算賬,但我想知道是否有更好的方法這樣我就可以在URL中使用的/

UPDATE

找到了解決辦法,這要歸功於馬克:

Route::get('/path/{all}', function($url){ 
    echo $url; 
})->where('all', '.*'); 
+0

http://stackoverflow.com/questions/13297278/laravel-using-any-wildcard-for-all-routes可能會回答你的問題。 –

+0

(:任何)在Laravel 5中似乎不起作用? {any}和{all}確實有效,但不匹配它看起來的子路徑... – Dylan

+0

{any}和{all}沒有什麼特別之處,因爲它們只是普通的路由參數。 –

回答

1

必須有一個程度url到你要定義你的路由。我想,子路線的數量是/必須預先定義的,例如你想用4 url部分。

如果是這樣的話,那麼使用可選參數將是最好的選擇:

Route::get('path/{url1?}/{url2?}/{url3?}/{url4?}', 
    function($url1 = null, $url2 = null, $url3 = null, $url4 = null){ 

    //check if sub-routes are defined and combine them to produce the desired url 
}); 

注:

似乎(:any)參數不再支持正如@Mark Davidson在SO答案中所建議的(我無法在laravel 5.0中重現它)。

同時,你也可以在使用正則表達式來達到預期的效果,如下面的(可能非常類似於你自己的方法):

Route::get('/{url}', function ($url) { 

// other url parts can be extracted from $url 

})->where('url', '.*'); 

但與第二種方式繼續走下去的唯一缺點是你可能不知道應該在多大程度上嵌套才能提取url子部分。

雖然以前的做法,你知道程度