2013-07-05 72 views
9

在Laravel 4中定義路由時,是否可以在同一路由中定義多個URI路徑?單一路由中的多個路由:: get()調用Laravel 4

目前我做到以下幾點:

Route::get('/', '[email protected]'); 
Route::get('/dashboard', array('as' => 'dashboard', 'uses' => 'v1\[email protected]')); 

但這違背了我的目的,我想不喜歡

Route::get('/, /dashboard', array('as' => 'dashboard', 'uses' => '[email protected]')); 
+5

就個人而言,我更願意重定向'/''到/ dashboard'(或副-versa)爲SEO和簡單的目的,爲什麼有兩個網站顯示完全相同的內容? –

+0

@Alexandre Danault在某些情況下,您希望基於路線(稍微)改變視圖的內容,但同時還需要使用單個控制器來處理請求(即不要在3個不同的區域重複整個邏輯控制器方法)。 – Alex

回答

2

的東西,如果我理解你的問題對的,我會說:

使用路線前綴http://laravel.com/docs/routing#route-prefixing

或者(可選)路由參數http://laravel.com/docs/routing#route-parameters

因此,例如:

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

OR

Route::get('/{dashboard?}', array('as' => 'dashboard', 'uses' => '[email protected]')); 
+11

第二個例子將匹配任何uri,例如'/ foo'這個回答是錯誤的 – Moak

20

我相信你需要使用一個可選的參數使用正則表達式:

Route::get('/{name}', array(
    'as' => 'dashboard', 
    'uses' => '[email protected]') 
    )->where('name', '(dashboard)?'); 

*假設你想要路由到相同的控制器,這是不完全清楚的問題。

*當前接受的答案與一切不僅僅匹配//dashboard

+3

2年後,這個問題還是相關的。然而,是否有可能處理超過兩條路線的情況?例如:與'/','/ dashboard'和'/ home'相同的控制器?我們是否可以將可選參數進一步限制爲「家」以及「儀表板」? – Alex

+0

@Alex問題是相關的。目前爲止有解決方案嗎? –

3

我覺得很有意思出於好奇的緣故,試圖解決這個問題,通過@Alex張貼在@graemec評論張貼一個可行的解決方案:

Route::get('/{name}', [ 
    'as' => 'dashboard', 
    'uses' => '[email protected]' 
    ] 
)->where('name', 'home|dashboard|'); //add as many as possible separated by | 

由於where()第二個參數預期的正則表達式所以我們可以指定它匹配剛好任何由|分開的那些,所以我認爲可能有whereIn()由此解決。

PS:這個例子是在Laravel測試5.4.30

希望有人發現了它有用