Php 从会话获取所有闪存数据
我正在保存一个Laravel响应的缓存,它工作正常。我正在使用一个中间件来检查请求是否存在缓存,并返回缓存响应,而不是再次生成该响应 但是flash消息有一个问题,当有一条flash消息要显示给用户时,它会返回没有任何flash消息的缓存响应 因此,我想在不知道钥匙的情况下检查是否有闪光信息。这样我就可以用一条flash消息返回未缓存的响应 这是中间件Php 从会话获取所有闪存数据,php,laravel,laravel-5,laravel-5.3,Php,Laravel,Laravel 5,Laravel 5.3,我正在保存一个Laravel响应的缓存,它工作正常。我正在使用一个中间件来检查请求是否存在缓存,并返回缓存响应,而不是再次生成该响应 但是flash消息有一个问题,当有一条flash消息要显示给用户时,它会返回没有任何flash消息的缓存响应 因此,我想在不知道钥匙的情况下检查是否有闪光信息。这样我就可以用一条flash消息返回未缓存的响应 这是中间件 public function handle($request, Closure $next, $ttl=1440) {
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使用
\u 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']
现在将为空(除非重新刷新),它将不存在
因此,本质上,如果您为当前请求刷新了某些内容,它将阻止缓存