gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Как в Laravel 6 добавить к Route:: языковой префикс с поддержкой языка «по-умолчанию»?

Пишу:
Route::pattern('locale', '(?:/|/en|/ru)');
Route::get('{locale}', 'MainController@index');
Route::get('{locale}/page', 'MainController@page');

потом в терминале:
php artisan route:cache
Во-первых сразу получаю ошибку от другого вообще левого модуля связанную с тем, что почему-то его ServiceProvider запускается повторно. Это странно поскольку у меня в регистрации выполняются команды, которые должны быть выполнены строго 1 раз и модуль бросает исключение, что повторно вызывать нельзя.

Пробовал переместить в boot() или в register() - всё равно, при artisan провайдер по какой-то причине вызывается дважды, несмотря на то, что перезапуск приложения не происходит. Проблема в общем-то исправляется костылём со статической bool переменной "isRegistered". Как править?

Получаю следующее поведение:
1. /index - работает
2. /ru/index - работает
3. /en/index - работает
4. /ru/page - работает
5. /en/page - работает
6. /page - не работает

Какие-нибудь лайфхаки?
  • Вопрос задан
  • 288 просмотров
Решения вопроса 1
gzhegow
@gzhegow Автор вопроса
aka "ОбнимиБизнесмена"
сегодня какимто чудом бубном и такойто матерью разобрался

Route::pattern('locale', '|ru/|en/');
Route::get('{locale}route', 'action');
// /(?P<locale>(?:|en/|ru/))route


Потом чтобы поставить локаль отрезаем правую наклонную. Так я когдато на чистом пхп делал, так и здесь прокатило, иначе получалось то две косые, то ни одной

Чтоб сделать редирект после сравнения с кукой или сессией косую надо вернуть на место
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
palkan_karabov
@palkan_karabov
PressF1
Route::get('{locale?}/page', 'MainController@page')->where(['locale' => '^[a-z][a-z]$']);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы