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






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-м обновлении его будет нигде.
По сути, это предотвратит кеширование, если вы что-то прошили для текущего запроса.