0

With Symfony, I want to use Cache Manager (FilesystemCache) for save my entities. I did this :

    $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()

First 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
}

Second dump :

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
}

Why my second dump() does not have all the informations ?

4

1 回答 1

1

由于您试图将一个对象保存在缓存中,它必须是可序列化的,以告诉 PHP 哪些属性应该被保护,哪些不应该。为了比较,您可以查看FOSUserBundle是如何做到的。

对于较大的对象图(对象及其关系,例如您的versions属性),将所有信息存储在缓存中通常是不可行的,因为这可能会在序列化/反序列化数据时导致内存问题。对于这个 Symfony 的UserProvider有一个refreshUser()重新加载剩余数据的方法。因此,如果您想将数据缓存作为用户管理的一部分,我建议您实现此方法以确保在调用此方法时获取剩余数据。

于 2017-10-08T09:30:06.290 回答