laravel - 为什么不能只序列化第一次“闭包”?
问题描述
错误是:
不允许序列化“闭包”
错误:
.../vendor/laravel/framework/src/Illuminate/Cache/RedisStore.php:295
第一次在 Cache 上永远记住时抛出。在第二次尝试后(重新加载浏览器时)它可以正常工作。
public function cache()
{
$task = $this;
return Cache::rememberForever('apply:' . $task->apply->slug . ':' . $task->slug, function () use ($task) {
return $task;
});
}
有趣的部分是这个。所以它适用于缓存$apply
应用的索引页面。(代码相同)
注意:此问题与 Redis 直接相关。请不要提及关于序列化的老问题。你也可以查看官方 Laravel 6.x 文档。添加与之相关的所有内容:https ://laravel.com/docs/6.x/cache#retrieving-items-from-the-cache
解决方案
如果缓存中存在数据,我通过手动存储和返回数据来修复它(rememberForever()
应该如何工作)。
public function cache () {
$slug = 'task:'.$this->slug;
if(Cache::has($slug)) return Cache::get($slug);
if(!Cache::put($slug, $this)) throw new ProtocolException(1045);
return Cache::get($slug);
}
推荐阅读
- java - 使用线程修改对象
- ios - Is export compliance required for CloudKit functionality?
- google-cloud-composer - 我们如何升级 Composer 环境的 Cloud Composer 版本?
- vim - VIM:从当前目录/项目中读取“变量”
- deployment - 重新启动应用程序时出错:使用 cf 将应用程序部署到 bluemix 时启动失败
- iis - 服务器 2008 中一个文件夹的 IIS 安全登录弹出窗口
- java - java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade 到 javax.servlet.ServletRequest
- azure-devops - VSTS 报告功能
- android - 如何判断路由器是否支持多播?
- listview - 卡内 Flutter ListView