le 14/04/2022 -  merci Drupal 9 Module Development

Supprimer le cache lors du développement

Lors du développement de votre site, il est conseillé de supprimer le mécanisme de cache. Attention cependant à le réactiver fréquement pour vérifier que les développements sont compatibles avec la gestion par défaut du cache. Dans settings.php : 

$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';

Module Dynamic Page Cache 

Ce module est installé d'office et fait partie des modules du coeur de drupal. Son approche est de « cacher » l'ensemble des données de la page qui peuvent servir à tous les utilisateurs et manipuler différemment les contenus dynamiques qui dépendent d’un "contexte".
Cela est possible grâce à la standardisation de ces données en « render array » et en d’autres composants qui peuvent fournir du « cacheability metadata ». Ce dernier est collecté et utilisé pour « cacher » et impacter le résultat final.

Cache tags

Quand un contenu dépend de données qui peuvent changer, c’est la resonsabilité du « render array »qui affiche ce contenu de déclarer l’entité comme dépendance qui utilise le « cache tags ».

Les « cache tags » sont simplement des chaînes de caractères et on peut en déclarer plusieurs pour un seul « render array ».
Ces  chaînes de caractères suivent le pattern suivant : thing:identifier ou parfois simplement thing.
Par exemple, le « cache tag » pour un node donné serait au format : node:1.

Pour que ce soit plus facile, toutes les entités et les objets de configuration peuvent être interrogées pour fournir leur « cache tag » respectif. Par exemple :

$tags = $config->getCacheTags();

ou

$tags = $node->getCacheTags();

$tags sera alors un tableau contenant un tag node:[nid]

Derrière cela, c’est l’interface CacheableDependencyInterface qui est implémentée et qui définit les méthodes pour récupérer les propriétés des métadonnées de cache.

Cache context

En cours de rédaction : motivez moi pour que je continue cet article

Exemple concret

Pour un contrôleur qui fait appel à un affichage qui dépend à la fois de la config et de l'utilisateur :

return [
  '#theme' => 'xxx',
  '#cache' => [
    "tags" => $config->getCacheTags(),
    "contexts"=> ['user'],
  ],
];