首页 > 解决方案 > 在 Laravel 中预加载中间件/响应缓存?

问题描述

我在 Laravel 中使用中间件缓存了一些响应值,如下所示:

public function handle($request, Closure $next)
{
    $domain = parse_url($request->headers->get('origin'), PHP_URL_HOST);
    $key = 'request|'.$domain.'|dashboard';
    return cache()->rememberForever($key, function () use ($request, $next) {
        return $next($request);
    });
}

如果该响应函数中的值发生变化,我想重置缓存,并且最好在任何用户体验加载时间之前预先设置它。

但是,鉴于我将缓存值设置为闭包,我不完全确定如何处理 - $next($request)。本质上,它正在缓存实际的序列化响应。

有没有一种简单的方法可以让我以编程方式模拟这个响应?

编辑:澄清 - 上述功能工作正常,我想要的是如下所示:

public function resetCache($key)
{
    // Clear out old cache:
    cache()->forget($key);

    // Preload new cache:
    cache()->set($key, function ($request, $next) {
        return $next($request);
    });
}

显然,上面的函数不起作用,因为我在$requestor上没有上下文$next

我开始认为我会以错误的方式处理这个问题,本质上。

标签: phplaravelcaching

解决方案


尝试这个:

public function handle($request, Closure $next)
{
    $domain = parse_url($request->headers->get('origin'), PHP_URL_HOST);
    $key = 'request|'.$domain.'|dashboard';
    $response = $next($request);
    if($response !== Cache:get($key)) {
        Cache:forget($key);
    }

    return cache()->rememberForever($key, function () use ($reponse) {
        return $response;
    });
}

推荐阅读