Рейтинг:0

Какие теги кеша могут запускаться изменением переменных состояния?

флаг ca

Если я хочу, чтобы мой массив рендеринга указывал Drupal, что он должен быть перестроен, когда, скажем, изменяется узел 1, я могу сделать что-то вроде этого:

$my_render_array = [
  ...
  '#кэш' => [
    'теги' => [
      'узел: 1',
    ],
  ],
]; 

Как я могу сообщить Drupal, что мой массив рендеринга должен быть перестроен, когда переменная состояния фу изменения?

Я пробовал это, но это не работает:

$my_render_array = [
  ...
  '#кэш' => [
    'теги' => [
      'состояние: фу',
    ],
  ],
];

Бег:

drush sset foo bar

Не вызывает аннулирование моего кеша.

Сейчас для меня это двухэтапный процесс, мне нужно сделать что-то вроде этого:

$my_render_array = [
  ...
  '#кэш' => [
    'теги' => [
      'some_custom_tag_that_i_invented',
    ],
  ],
];

drush sset foo bar
drush php "\Drupal::service('cache_tags.invalidator')->invalidateTags(['some_custom_tag_that_i_invented'])"

Ядро Drupal, кажется, использует теги кеша в форме «state:...», хотя и не так часто и только в рамках автоматических тестов:

# grep -R 'invalidateTags' core|состояние grep
core/modules/jsonapi/tests/src/Functional/CommentTest.php: Cache::invalidateTags(['state:jsonapi__entity_test_filter_access_blacklist']);

# grep -R 'состояние: jsonapi__entity_test_filter_access_blacklist' ядро
core/modules/jsonapi/tests/src/Functional/EntityTestTest.php: $cacheability->addCacheTags(['state:jsonapi__entity_test_filter_access_blacklist']);
core/modules/jsonapi/tests/src/Functional/CommentTest.php: Cache::invalidateTags(['state:jsonapi__entity_test_filter_access_blacklist']);
core/modules/jsonapi/tests/src/Functional/CommentTest.php: $cacheability->addCacheTags(['state:jsonapi__entity_test_filter_access_blacklist']);
core/modules/jsonapi/src/Access/TemporaryQueryGuard.php: $cacheability->addCacheTags(['state:jsonapi__entity_test_filter_access_blacklist']);

# grep -R 'jsonapi__entity_test_filter_access_blacklist' ядро
core/modules/jsonapi/tests/src/Functional/EntityTestTest.php: $cacheability->addCacheTags(['state:jsonapi__entity_test_filter_access_blacklist']);
core/modules/jsonapi/tests/src/Functional/CommentTest.php: \Drupal::state()->set('jsonapi__entity_test_filter_access_blacklist', [$this->entity->getCommentedEntityId()]);
core/modules/jsonapi/tests/src/Functional/CommentTest.php: Cache::invalidateTags(['state:jsonapi__entity_test_filter_access_blacklist']);
core/modules/jsonapi/tests/src/Functional/CommentTest.php: $cacheability->addCacheTags(['state:jsonapi__entity_test_filter_access_blacklist']);
core/modules/jsonapi/src/Access/TemporaryQueryGuard.php: $blacklist = \Drupal::state()->get('jsonapi__entity_test_filter_access_blacklist', []);
core/modules/jsonapi/src/Access/TemporaryQueryGuard.php: $cacheability->addCacheTags(['state:jsonapi__entity_test_filter_access_blacklist']);
Jaypan avatar
флаг de
Я не вижу, чтобы ядро ​​Drupal предоставляло какие-либо кеш-теги для состояния, поэтому я думаю, что вам придется использовать свой собственный пользовательский тег.
флаг ca
Спасибо. Это была бы не плохая функция. Я открыл запрос функции на https://www.drupal.org/project/drupal/issues/3258064.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.