Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从会话获取所有闪存数据_Php_Laravel_Laravel 5_Laravel 5.3 - Fatal编程技术网

Php 从会话获取所有闪存数据

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) {

我正在保存一个Laravel响应的缓存,它工作正常。我正在使用一个中间件来检查请求是否存在缓存,并返回缓存响应,而不是再次生成该响应

但是flash消息有一个问题,当有一条flash消息要显示给用户时,它会返回没有任何flash消息的缓存响应

因此,我想在不知道钥匙的情况下检查是否有闪光信息。这样我就可以用一条flash消息返回未缓存的响应

这是中间件

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']
现在将为空(除非重新刷新),它将不存在

因此,本质上,如果您为当前请求刷新了某些内容,它将阻止缓存