Я не смог получить добавление контекста кеша для работы с сущностями в drupal 8. В частности, я собираюсь использовать заголовки: User-Agent. Я попробовал много вариантов следующего в модуле.
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';
}
}
Я пытаюсь проверить доступ к узлу при изменении этого контекста. Я также попробовал это в hook_entity_build_defaults_alter()
функции.
Ответы:
Вы действительно должны использовать
hook_entity_build_defaults_alter()
. Его документация даже прямо заявляет это:Возможно, это не сработало, потому что вы забыли очистить кэш рендеринга после реализации этого хука.
Этот хук вызывается в https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21EntityViewBuilder.php/class/EntityViewBuilder/8
Также см. Https://www.drupal.org/developing/api/8/cache/contexts для обзора контекста кэша (что это такое, как их использовать, с какими ядрами поставляется ядро).
источник