Я создаю двуязычный сайт в 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, но вы можете проверить фактические компоненты пути?
Вы можете создавать шаблоны регулярных выражений и делать такие вещи, как:
Route::pattern('mugs', 'mugs|tasses');
Route::get('{locale}/{mugs}', ['uses' => 'MugsController@index']);
Route::get('{locale}/{mugs}/{id}', ['uses' => 'MugsController@show']);
Вы можете сделать это следующим образом:
Route::get('{locale}/{special}', ['uses' => 'MugsController@show'])->where('special','^(mugs|tasses)$');
special
в этом случае должно быть либо mugs
или же tasses