Я пытаюсь установить сеанс в Laravel 7, который будет помнить, на каком языке должен отображаться веб-сайт
На моих маршрутах у меня есть
Route::get('set-locale/{locale}', function ($locale) {
if (!in_array($locale, ['en', 'nl'])) {
// todo: return with flash
}
\Illuminate\Support\Facades\Session::put('locale', $locale);
// the session is set here
return back();
})->name('set-locale');
У меня есть промежуточное ПО это часть промежуточного программного обеспечения «сети». Я вижу, что он используется при каждой загрузке страницы, но нужное значение отсутствует
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
Locale::class
],
class Locale
{
public function handle(Request $request, Closure $next, $guard = null)
{
dump(Session::all()); // I can see the login info here, not the locale
if (Session::has('locale')) {
App::setLocale(Session::get('locale'));
}
return $next($request);
}
}
Я не изменил конфигурацию для сеансов, поэтому он использует настройки по умолчанию
'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
Я рассмотрел использование
back()->with('locale', $locale);
Но это тоже не работает, и я также хочу сохранить значение для продолжительности сеанса, а не только для следующего запроса
Я смотрел на десятки подобных вопросов здесь и в других местах, и ни один из них, похоже, не охватывает этот точный сценарий