web-dev-qa-db-fra.com

Comment invalider le cache d'une entité?

Existe-t-il un moyen simple de vider le cache d'une entité personnalisée? Je sais qu'il y a une entrée dans le cache_entity-Table. Si je le supprime manuellement, tout va bien. J'ai essayé de faire la même chose que dans \Drupal\Core\Entity->invalidateTagsOnSave() ou \Drupal\Core\Entity->invalidateTagsOnDelete(). Cela ne semble rien changer.

Malheureusement, je ne peux pas simplement charger l'entité et la réenregistrer dans cette situation.

2
Stephan Steege

Mais vous connaissez l'ID d'entité que vous souhaitez faire invalider?

Utilisez ensuite \Drupal::entityTypeManager()->getStorage($entity_type_id)->resetCache([$id]);

10
Berdir

Dans votre entité personnalisée, vous devez remplacer la fonction

public function getCacheTagsToInvalidate();

de EntityInterface .

Ensuite, pour vider le cache de cette entité, vous appelez simplement

\Drupal\Core\Cache\Cache::invalidateTags($entity->getCacheTagsToInvalidate());

Si vous ne remplacez pas getCacheTagsToInvalidate (), l'implémentation par défaut dans entity.php devrait également fonctionner:

public function getCacheTagsToInvalidate() {
    if ($this->isNew()) {
      return [];
    }
    return [$this->entityTypeId . ':' . $this->id()];
  }

Les balises [] sont juste le nom plus l'id.

2
Rainer Feike