Проблема < /h2>
Я испытываю конфликт в Ларавеле 11 где я могу получить только обычные сеансы или флэш -сообщения, но не оба: < /p>
[*] Когда прокомментируется промежуточное программное обеспечение: Flash Messages работают, но обычные сеансы Don 't УСТАНОВИТЬ < /li>
Когда промежуточное программное обеспечение неуместно: нормальные сеансы работают, но флэш -сообщения исчезают после перенаправления < /li>
< /ol>
code < /h2>
контроллер: < /h3>
Код: Выделить всё
public function switchLang(Request $request, $locale)
{
$request->session()->put('locale', $locale); // Normal session
return redirect()
->back()
->with('flash_message', '语言更换成功.') // Flash message
->with('flash_type', 'success');
}
< /code>
view: < /h3>
{{-- Flash Message --}}
@if(session('flash_message'))
{{ session('flash_message') }}
@endif
{{-- Normal Session --}}
{{ session('locale') }}
< /code>
конфигурация Aapp.php, которая делает флэш-работу, но разбивает нормальные сеансы: < /h3>
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
// Commenting these out makes flash messages work but breaks normal sessions
// $middleware->use([
// \Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\View\Middleware\ShareErrorsFromSession::class,
// \App\Http\Middleware\VerifyCsrfToken::class,
// ]);
})
->create();
< /code>
конфигурация php.php, которая заставляет обычные сеансы работать, но разрывает Flash: < /h3>
return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
// Uncommenting these makes normal sessions work but breaks flash messages
$middleware->use([
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
]);
})
->create();
Код: Выделить всё
return [
'driver' => env('SESSION_DRIVER', 'database'),
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
'encrypt' => env('SESSION_ENCRYPT', false),
'files' => storage_path('framework/sessions'),
'connection' => env('SESSION_CONNECTION'),
'table' => env('SESSION_TABLE', 'sessions'),
'store' => env('SESSION_STORE'),
'lottery' => [2, 100],
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'path' => env('SESSION_PATH', '/'),
'domain' => env('SESSION_DOMAIN'),
'secure' => env('SESSION_SECURE_COOKIE'),
'http_only' => env('SESSION_HTTP_ONLY', true),
'same_site' => env('SESSION_SAME_SITE', 'lax'),
'partitioned' => env('SESSION_PARTITIONED_COOKIE', false),
];
< /code>
журналы отладки < /h2>
Когда Flash работает (но нормальные сеансы не делают): < /p>
[2024-11-21 02:26:00] First Request:
{
"_token": "o5IooR4tva9abbacvE14SPzS1EKR7XKj7RKO8UWt",
"_flash": {"old": ["flash_message", "flash_type"], "new": []},
"flash_message": "语言更换成功.",
"flash_type": "success"
}
< /code>
Когда обычные сеансы работают (но Flash нет): < /p>
{
"_token": "o5IooR4tva9abbacvE14SPzS1EKR7XKj7RKO8UWt",
"_flash": {"old": [], "new": []},
"locale": "en"
}
< /code>
среда < /h2>
Версия Laravel: 11 < /li>
PHP версия: 8.2 < /li>
Драйвер сеанса: база данных < /li>
Конфигурация сеанса: с помощью драйвера базы данных < /li>
< /ul>
Что я пробовал < /h2>
Использование session ()-> flash () < /code> < /li>
Использование redirect ( )-> с ()
[*] Проверка заказа промежуточного программного обеспечения
Проверенная таблица сеансов существует, и миграция актуальна < /li>
Созданная пользовательская реализация флэш-памяти (работает, но хочу использовать встроенную функциональность Laravel) < /li>
< /ol>
теги: laravel , php , sessions , flash-messages , laravel-11
Подробнее здесь: https://stackoverflow.com/questions/792 ... vel-11-and