2014-09-24 29 views
2

我在Laravel 4中構建了一個雙語網站,我的URL包含一個語言環境標識符。除此之外,使用正確的語言顯示漂亮的slu's聲很重要。所以,假設我有一條路線,你會找到馬克杯。法語中的等效物將是,口號爲可能還是Laravel路線?

目前我在做什麼是

Route::get('{locale}/mugs', ['uses' => '[email protected]']); 
Route::get('{locale}/mugs/{id}', ['uses' => '[email protected]']); 

Route::get('{locale}/tasses', ['uses' => '[email protected]']); 
Route::get('{locale}/tasses/{id}', ['uses' => '[email protected]']); 

和短URL /現場檢查,並重定向到控制器中的方法可以確保塞是用正確的語言,這樣你就不會結束例如/fr/mugs

這工作正常,但可能會變得笨拙,因爲如果我做更多的路線,我會有兩個。例如,我必須同時有{locale}/mugs/ceramic/{id}{locale}/tasses/ceramique/{id}等。

有沒有辦法在Laravel中做類似{locale}/mugs|tasses/{id}的事情?甚至檢查RegEx?

我知道你可以使用RegEx檢查路由參數,但是你可以檢查實際的路徑組件嗎?

回答

2

您可以創建正則表達式模式,做這樣的事情:

Route::pattern('mugs', 'mugs|tasses'); 

Route::get('{locale}/{mugs}', ['uses' => '[email protected]']); 
Route::get('{locale}/{mugs}/{id}', ['uses' => '[email protected]']); 
+0

是的!這工作得很好。謝謝。 – magiclantern 2014-09-24 14:29:40

1

你可以這樣來做:

Route::get('{locale}/{special}', ['uses' => '[email protected]'])->where('special','^(mugs|tasses)$'); 

special在這種情況下,必須是mugstasses

+0

但現在他所有的路線都會指向'MugsController @ show',他的代碼也指向'MugsController @ index'。 – 2014-09-24 13:17:08

+0

@hebron我沒有注意到這一點。我剛剛修改了這個ID部分 – 2014-09-24 13:18:31