2017-10-08 7 views
0

Symfonyでは、私のエンティティを保存するのにCache Manager(FilesystemCache)を使用します。私の第二ダンプ()は、すべての情報を持っていないのはなぜSymfonyはキャッシュに部分情報を保存します

User {#188 ▼ 
    -id: 1 
    -username: "[email protected]" 
    -email: null 
    -plainPassword: null 
    -password: "$2y$13$sFSRu2lyDmrfFZP24vkeQOiaYJ5E2eo/kLlaIITgwTrwZunEBcO1q" 
    -onlineAt: null 
    -changePasswordAt: null 
    -roles: [] 
    -registerToken: null 
    -versions: null 
    -deletedAt: null 
    -deletedBy: null 
} 

$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: "[email protected]" 
    -email: "[email protected]" 
    -plainPassword: null 
    -password: "$2y$13$sFSRu2lyDmrfFZP24vkeQOiaYJ5E2eo/kLlaIITgwTrwZunEBcO1q" 
    -onlineAt: DateTime {#432 ▶} 
    -changePasswordAt: null 
    -roles: array:3 [▶] 
    -registerToken: null 
    -versions: PersistentCollection {#558 ▶} 
    -deletedAt: null 
    -deletedBy: null 
} 

第二にダンプ私はこれをしませんでしたか?

答えて

1

キャッシュにオブジェクトを保存しようとしているので、どのプロパティを安全にするべきか、そうでないかをPHPに伝えるにはSerializableにする必要があります。比較のために、FOSUserBundleがどうなっているか見ることができます。

大規模なオブジェクトグラフ(オブジェクトとそれらの関係、例えばversionsプロパティ)では、データのシリアライズ/シリアル化解除時にメモリ問題が発生する可能性があるため、キャッシュにすべての情報を格納することは通常不可能です。このsymfonyのUserProviderには、残りのデータをリロードするrefreshUser()メソッドがあります。そのため、ユーザー管理の一環としてデータをキャッシュする場合は、このメソッドを実装して、このメソッドが呼び出されるたびに残りのデータがフェッチされるようにすることをお勧めします。

関連する問題