Я решил префикс всех моих маршрутов переменной $ locale. Это Найден код от прибегая к помощи:Создание языковых сменных URL-адресов в laravel
$locale = Request::segment(1);
if (in_array($locale, Config::get('app.available_locales'))) {
App::setLocale($locale);
} else {
$locale = null;
}
Route::group(array('prefix' => $locale), function() {
//All my routes
});
Теперь я хотел бы генерировать URL: S динамически для прыжков между локалями. Мне нужен способ генерации текущего URL-адреса или маршрута, но замените параметр locale $. Вы должны быть в состоянии написать что-то похожее на этот псевдокод:
route(Route::Current(), [$locale => 'foo'])
Вопрос:
Я хочу, чтобы взять мой текущий URL и заменить один аргумент в нем. Как мне это сделать?
Update 1:
Давать мой маршрут имя, я могу это сделать:
route('index', 'foo') //Gives mywebsite.com?foo
Это, однако, не дает желаемого результата, mywebsite.com/foo , Вместо этого он генерирует mywebsite.com?foo. Я предполагаю, что маршрут не понимает, что этот маршрут вложен и имеет префикс фрагмента, поэтому он обрабатывает мой аргумент как параметр. Определение того, что это локаль я хочу изменить не поможет:
route('index', ['locale' => 'foo']) //Gives mywebsite.com?locale=foo
Update 2:
Изменение префикса вместо сказать:
Route::group(array('prefix' => '{locale?}'), function() {
делает маршрут() работы:
route('index', ['locale' => 'foo']) //Gives mywebsite.com/foo
Однако он разрушает некоторый url: s внутри группы , так как некоторые из них начинаются с переменных. Следующий маршрут внутри маршрутной группы перестает работать:
Route::get('/{id}', '[email protected]');
Как routes.php интерпретирует URL-адрес mywebsite.com/foo как «Foo» теперь язык. Если есть какой-то способ установить значение по умолчанию в routes.php для локали, чтобы вы могли написать его как {route} вместо {route?} И перенаправить его к языку по умолчанию, если он отсутствует, проблема будет решена ,
Update 3:
Двигаясь в направлении, имеющий «префикс» => «{? Локали}» вместо этого приводит к слишком много подзадач, стоит добиваться. Проблема возвращается к созданию URL-адресов из текущего URL-адреса, но вставляет язык в URL-адрес. В настоящее время я рассматриваю возможность делать это только с заменой регулярных выражений, потому что это самое прямое решение.
Вы хотите «префикс всех [моих] маршрутов», но затем вы хотите сделать его необязательным? Так чего же вы действительно хотите? Я думаю, что лучше префикс ALL или NONE ваших маршрутов. – Yannici
Я хочу иметь рабочую локальную систему с языковой версией в URL-адресе. Если локаль отсутствует в URL-адресе url/request, следует использовать локаль по умолчанию. – Rkey
Я не думаю, что это так просто, потому что Laravel не знает, когда он должен интерпретировать первый параметр как локаль, а когда нет. – Yannici