2017-10-08 3 views
0

Mit Symfony möchte ich Cache Manager (DateisystemCache) zum Speichern meiner Entitäten verwenden. Ich tat dies:Symfony partielle Informationen im Cache speichern

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

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

Zweite dump:

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 
} 

Warum meine zweite dump() nicht alle Informationen hat?

Antwort

1

Da Sie versuchen, ein Objekt im Cache zu speichern, muss es Serializable sein, um PHP mitzuteilen, welche Eigenschaften gesichert werden sollen und welche nicht. Zum Vergleich können Sie sehen, wie FOSUserBundle tut es.

Bei größeren Objektdiagrammen (Objekte und ihre Beziehungen, wie Ihre versions-Eigenschaft) ist es normalerweise nicht möglich, alle Informationen im Cache zu speichern, da dies zu Speicherproblemen beim Serialisieren/Deinialisieren der Daten führen kann. Für diese Symfony UserProvider hat eine refreshUser() Methode, die die verbleibenden Daten neu lädt. Wenn Sie also die Daten als Teil Ihrer Benutzerverwaltung zwischenspeichern möchten, sollten Sie diese Methode implementieren, um sicherzustellen, dass die verbleibenden Daten abgerufen werden, wenn diese Methode aufgerufen wird.

Verwandte Themen