【发布时间】:2020-07-16 22:38:39
【问题描述】:
我正在尝试在 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);
但这也不起作用,我还想在会话期间保留该值,而不仅仅是下一个请求
我已经在这里和其他地方查看了几十个类似的问题,但似乎没有一个涵盖这个确切的场景
【问题讨论】:
标签: laravel session redirect session-variables http-redirect