Вот как использовать теги кеша в контексте пользовательских блоков, которые я пробовал и работает, но я думаю, что это применимо к другим контекстам
Использовать тэги drupal по умолчанию
В массиве сборки вы можете указать, cache > tags > node_list
и содержимое этого блока станет недействительным (обновленным), когда ЛЮБОЙ УЗЕЛ будет изменен, и с вашей стороны больше ничего не делать
public function build() {
return array(
'#markup' => MY_MODULE_awesome_dynamic_node_content(),
'#cache' => [
'tags' => ['node_list'], //invalidate when any node updates
//'tags' => ['node:1','term:2'], //invalidate when node 1 or term 2 updates
],
);
}
В качестве альтернативы вы можете добавить один или несколько идентификаторов узлов / терминов / пользователей, чтобы сделать массив недействительным для определенных узлов или терминов, как показано в комментарии к коду выше. Примечание: вы можете смешивать и сопоставлять узлы, термины, пользователей и пользовательские теги по своему усмотрению.
Используйте свои собственные теги
если вы хотите иметь свой собственный способ очистки массива сборки, добавьте свой собственный уникальный тег в массив сборки (подойдет любая уникальная строка)
public function build() {
return array(
'#markup' => MY_MODULE_awesome_dynamic_node_content(),
'#cache' => [
'tags' => ['MY_CUSTOM_UNIQUE_TAG'],
],
);
}
и в вашем собственном коде логика вызова invalidateTags
с вашим собственным тегом
function MY_MODULE_custom_clear_cache_logic(){
...
\Drupal\Core\Cache\Cache::invalidateTags(array('MY_CUSTOM_UNIQUE_TAG'));
если вы хотите прочитать больше о внутренностях кеша drupal 8