2015-06-12 113 views
1

我正在做一個簡單的項目。我希望它儘可能小,所以我試圖創建系統,我可以創建頁面,並將它們放在localhost/{page?}Laravel - 多條路線

但是,這裏是問題所在。我也想要定義一些路線(例如路線/blog),如下所示。

Route::get('/{page?}', ['as' => 'root', 'uses' => '[email protected]']); 

Route::get('blog/{slug?}', ['as' => 'blog.post', 'uses' => '[email protected]']); 
Route::get('blog/page/{page}', ['as' => 'blog.page', 'uses' => '[email protected]'])->where('page', '[0-9]+'); 

使用此設置,它只使用第一條路線。

我的問題是。有沒有辦法做到這一點?或者,這超出了Laravel的能力嗎?

謝謝你的幫助。

回答

3

是的,把你的第一條路線作爲最後一條路線。這樣它最後會被拾起。您可能還需要在此之前放置blog/{slug?},因此blog/slug/{page}是第一個。

Route::get('blog/page/{page}', ['as' => 'blog.page', 'uses' => '[email protected]'])->where('page', '[0-9]+'); 

Route::get('blog/{slug?}', ['as' => 'blog.post', 'uses' => '[email protected]']); 

Route::get('/{page?}', ['as' => 'root', 'uses' => '[email protected]']); 

基本上會發生什麼是最基本的途徑是拿起其他路線,因爲沒有理由爲它不,它在技術上即使它不是你想要的路由的路由相匹配。把最具體的路線首先通常處理這個問題。

+0

謝謝。我有點忘記了順序可以改變這一點。 – Aadam

+0

有一個upvote先生 – haakym

2

嘗試重新安排他們:

Route::get('blog/page/{page}', ['as' => 'blog.page', 'uses' => '[email protected]'])->where('page', '[0-9]+'); 

Route::get('blog/{slug?}', ['as' => 'blog.post', 'uses' => '[email protected]']); 

Route::get('/{page?}', ['as' => 'root', 'uses' => '[email protected]']); 

否則他們得到 「覆蓋」

+1

爲了公平@ user3158900回答2分鐘前,所以他應該得到接受的答案,他給了一個更好的解釋 – haakym