Ich konnte keinen Cache-Kontext hinzufügen, um für Entitäten in Drupal 8 zu arbeiten. Insbesondere gehe ich für Header: User-Agent. Ich habe viele Variationen der folgenden in einem Modul ausprobiert.
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';
}
}
Ich versuche, den Knotenzugriff zu überprüfen, wenn sich dieser Kontext ändert. Ich habe es auch in der hook_entity_build_defaults_alter()
Funktion versucht .
Antworten:
Sie sollten in der Tat verwenden
hook_entity_build_defaults_alter()
. In der Dokumentation heißt es sogar ausdrücklich:Bei Ihnen hat es wahrscheinlich nicht funktioniert, weil Sie vergessen haben, den Render-Cache nach der Implementierung dieses Hooks zu löschen.
Dieser Hook wird in https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21EntityViewBuilder.php/class/EntityViewBuilder/8 aufgerufen
Unter https://www.drupal.org/developing/api/8/cache/contexts finden Sie auch eine Übersicht über die Cache-Kontexte (was sie sind, wie sie verwendet werden, mit welchen Kernkontexten sie geliefert werden).
quelle