laravel редирект
Установил шаблон laravel
https://github.com/EliteDevSolution/codecanyon-onno-laravel-news-magazine-script
Сделал локализацию, но при url 'base_url/en' редиректит на 'base_url/'
Пытался найти этот редирект, но так и не нашёл по умолчанию языки локализации были en/ar
Route:
Route::get('lang/{lang}', ['as' => 'lang.switch', 'uses' => 'Site\LanguageController@switchLang']);
Route::group(
[
'prefix' => '{locale}',
'where' => ['locale' => '[a-zA-Z]{2}'],
'middleware' => ['set_locale']
],
function () use($page, $article){...}
Controller:
public function switchLang($lang)
{
if (array_key_exists($lang, Config::get('languages'))) {
$redirectUrl = $this->getBackUrl($lang);
session(['locale' => $lang]);
Cookie::queue('lang', $lang, time() + time() + 60 * 60 * 24 * 30, null, null, false, false);
return Redirect::to($redirectUrl);
}
return Redirect::back();
}
private function getBackUrl(string $lang)
{
$backUrl = url()->previous();
// dd($backUrl);
foreach (array_keys(Config::get('languages')) as $langSlug) {
if (str_contains($backUrl, $langSlug)) {
return str_replace($langSlug, $lang, $backUrl);
}
}
return $backUrl;
}
Middleware:
class SetLocaleMiddleware
{
public function handle(Request $request, Closure $next)
{
// App::setlocale(session('locale'));
$lang = $request->segment(1);
if($lang == 'en' || $lang == 'fr' || $lang == 'es' || $lang == 'ru' || $lang == 'it' || $lang == 'de' || $lang == 'pt') {
session(['locale' => $lang]);
App::setlocale($lang);
Cookie::queue('lang', $lang, time() + time() + 60 * 60 * 24 * 30, null, null, false, false);
} else {
return redirect()->to('/fr');
// \abort(404);
}
URL::defaults(['locale' => app()->getLocale()]);
return $next($request);
}
}
Источник: Stack Overflow на русском