Возможны ли маршруты Laravel?

Я создаю двуязычный сайт в Laravel 4, и мои URL содержат идентификатор локали. Кроме того, важно иметь красиво выглядящих слизней на правильном языке. Итак, допустим, у меня есть маршрут, по которому вы найдете кружки. Эквивалент на французском будет tasses.

В настоящее время я занимаюсь

Route::get('{locale}/mugs', ['uses' => 'MugsController@index']);
Route::get('{locale}/mugs/{id}', ['uses' => 'MugsController@show']);

Route::get('{locale}/tasses', ['uses' => 'MugsController@index']);
Route::get('{locale}/tasses/{id}', ['uses' => 'MugsController@show']);

И короткая проверка 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' => 'MugsController@index']);
Route::get('{locale}/{mugs}/{id}', ['uses' => 'MugsController@show']);
2

Другие решения

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

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

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

1

По вопросам рекламы [email protected]