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.
Mais vous connaissez l'ID d'entité que vous souhaitez faire invalider?
Utilisez ensuite \Drupal::entityTypeManager()->getStorage($entity_type_id)->resetCache([$id]);
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.