2014-09-24 4 views
2

Я строю двуязычный сайт в Laravel 4, и мои URL-адреса содержат идентификатор локали. Помимо этого, важно иметь приятные поисковые пули на правильном языке. Итак, допустим, у меня есть маршрут, на котором вы найдете кружки. Эквивалент по-французски будет tasses.Возможны ли маршруты или маршруты 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} и т. Д.

Есть ли способ сделать что-то вроде {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

1

Вы можете сделать это следующим образом:

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

special в этом случае должно быть либо mugs или tasses

+0

Но теперь все его маршруты будут указывать на «MugsController @ show», его код также указывает на «MugsController @ index». –

+0

@hebron Я этого не заметил. Я только что вернул эту часть id –

Смежные вопросы