[英]Preloading middleware / response cache in 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);
});
}
如果该响应 function 中的值发生变化,我想重置缓存,最好在任何用户体验加载时间之前预先设置。
但是,鉴于我将缓存值设置为闭包 - $next($request)
,我不完全确定如何 go 。 本质上,它正在缓存实际的序列化响应。
有没有一种简单的方法可以让我以编程方式模拟这个响应?
编辑:澄清 - 上述功能工作正常,我想要的是如下所示:
public function resetCache($key)
{
// Clear out old cache:
cache()->forget($key);
// Preload new cache:
cache()->set($key, function ($request, $next) {
return $next($request);
});
}
显然,上面的 function 不起作用,因为我没有关于$request
或$next
的上下文。
我开始认为我会以错误的方式解决这个问题,本质上。
尝试这个:
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;
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.