Получить все флеш-данные из сеанса

Я сохраняю кеш ответов Laravel, и он работает нормально. Я использую промежуточное программное обеспечение, которое проверяет, существует ли кеш для запроса, и возвращаю кешированный ответ вместо повторного создания этого ответа.

Но есть проблема с флэш-сообщениями, когда есть флэш-сообщение, которое должно быть показано пользователю, он возвращает кешированный ответ, который не имеет флэш-сообщения.

Поэтому я хочу проверить, есть ли флэш-сообщение, не зная ключа. Чтобы я мог вернуть некэшированный ответ с помощью флэш-сообщения.

Вот это промежуточное ПО

public function handle($request, Closure $next, $ttl=1440)
    {
        if (authenticate_user() != null || $request->isMethod('post'))
            return $next($request);
        $params = $request->query(); unset($params['_method']); ksort($params);
        $key = md5(url()->current().'?'.http_build_query($params));
        if ($request->get('_method')=='purge')
            Cache::forget($key);
        if (Cache::has($key)){
            $cache = Cache::get($key);
            $response = response($cache['content']);
            $response->header('X-Proxy-Cache', 'HIT');
        }
        else {
            $response = $next($request);
            Cache::put($key,['content' => $response->content(), 'headers' => array_map(function($element){ return implode(',', $element); }, $response->headers->all())],$ttl);
            $response->header('X-Proxy-Cache', 'MISS');
        }

        return $response;
    }

Вот dd(session()). Если это может кому-то помочь

Получить все флеш-данные из сеанса

Мне нужны данные, соответствующие ключу success.

Но я не хочу использовать конкретный ключ для получения флеш-данных. Я просто хочу проверить, есть ли флэш-сообщение независимо от ключа, используемого для хранения этих данных.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
498
1

Ответы 1

Laravel внутренне отслеживает флэш-данные с помощью переменной _flash, вы можете попробовать это

    if (  Cache::has($key)  &&  empty(session('_flash')['new'])  ){
        $cache = Cache::get($key);
        $response = response($cache['content']);
        $response->header('X-Proxy-Cache', 'HIT');
    }
    else {
        $response = $next($request);
        Cache::put($key,['content' => $response->content(), 'headers' => array_map(function($element){ return implode(',', $element); }, $response->headers->all())],$ttl);
        $response->header('X-Proxy-Cache', 'MISS');
    }

Для получения дополнительной информации вам может потребоваться небольшая настройка: если вы получаете сеанс в массиве, например, $session, тогда $session['flash']['new'] относится к данным, которые только что были прошиты. Итак, если вы только что высветили «мы только что отправили вам электронное письмо с инструкциями по сбросу пароля.» в своем действии, то появится сообщение будет находиться под $session['flash']['new'] в массиве сеансов; при втором обновлении он будет перенесен в $session['flash']['old'], а $session['flash']['new'] теперь будет пустым (если вы не перепрошиваете), при 3-м обновлении его будет нигде.

По сути, это предотвратит кеширование, если вы что-то прошили для текущего запроса.

Другие вопросы по теме