Je n'ai pas pu obtenir l'ajout d'un contexte de cache pour travailler pour les entités dans Drupal 8. Plus précisément, je vais pour les en-têtes: User-Agent. J'ai essayé de nombreuses variantes sur les éléments suivants dans un module.
use Drupal\node\NodeInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
function hook_entity_view_alter(&$build, EntityInterface $entity, EntityViewDisplayInterface $display){
if($entity->getType() == 'relevant_type'){
$build['#cache']['contexts'][] = 'headers:User-Agent';
}
}
J'essaie d'obtenir l'accès au nœud à vérifier lorsque ce contexte change. Je l'ai également essayé dans la hook_entity_build_defaults_alter()
fonction.
Réponses:
Vous devez en effet utiliser
hook_entity_build_defaults_alter()
. Sa documentation l'indique même explicitement:Cela n'a probablement pas fonctionné pour vous car vous avez oublié de vider le cache de rendu après avoir implémenté ce hook.
Ce crochet est invoqué dans https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21EntityViewBuilder.php/class/EntityViewBuilder/8
Voir également https://www.drupal.org/developing/api/8/cache/contexts pour un aperçu des contextes de cache (ce qu'ils sont, comment les utiliser, lesquels sont fournis avec le noyau).
la source