使用Symfony,我想使用Cache Manager(FilesystemCache)来保存我的实体。我这样做了:
$find = $this->entityManager->getRepository(User::class)
->getSingleResult([
'whereId' => $id,
]);
dump($find); // First dump()
$this->cacheManager->set('user-1', $find);
dump($this->cacheManager->get('user-1')); // Second dump()
首次转储:
User {#457 ▼
-id: 1
-username: "contact@site.com"
-email: "contact@site.com"
-plainPassword: null
-password: "$2y$13$sFSRu2lyDmrfFZP24vkeQOiaYJ5E2eo/kLlaIITgwTrwZunEBcO1q"
-onlineAt: DateTime {#432 ▶}
-changePasswordAt: null
-roles: array:3 [▶]
-registerToken: null
-versions: PersistentCollection {#558 ▶}
-deletedAt: null
-deletedBy: null
}
第二次转储:
User {#188 ▼
-id: 1
-username: "contact@site.com"
-email: null
-plainPassword: null
-password: "$2y$13$sFSRu2lyDmrfFZP24vkeQOiaYJ5E2eo/kLlaIITgwTrwZunEBcO1q"
-onlineAt: null
-changePasswordAt: null
-roles: []
-registerToken: null
-versions: null
-deletedAt: null
-deletedBy: null
}
为什么我的第二个 dump()没有所有信息?
答案 0 :(得分:1)
由于您尝试将对象保存在缓存中,因此必须Serializable告诉PHP应该安全哪些属性,哪些不安全。为了进行比较,您可以了解FOSUserBundle是如何做到的。
对于较大的对象图(对象及其关系,例如versions
属性),将所有信息存储在缓存中通常是不可行的,因为这可能会在序列化/反序列化时导致内存问题数据。为此,Symfony UserProvider有一个refreshUser()
方法可以重新加载剩余的数据。因此,如果您希望将数据缓存为用户管理的一部分,我建议您实施此方法以确保在调用此方法时获取剩余数据。