Рейтинг:0

Где определить настраиваемые правила кэширования сущностей для страниц сведений

флаг cn

Если у вас есть более крупный проект, у вас, вероятно, включен как внутренний кеш страниц, так и модуль внутреннего динамического кеша страниц. В моем случае да. Но у меня есть раздел на моем веб-сайте, содержащий настраиваемые объекты («Конкурс»), где я хотел бы иметь индивидуальный контроль кэширования страницы сведений (конкурс/1). Это то, что я нашел до сих пор:

/**
 * Реализует hook_entity_view_alter()
 * Отключить кеширование для всех типов объектов конкурса
 */
function mymodule_entity_view_alter (массив & $ build, Drupal \ Core \ Entity \ EntityInterface $ Entity, \ Drupal \ Core \ Entity \ Display \ EntityViewDisplayInterface $ display) {
  $types = ['конкурс'];
  если (in_array($entity->bundle(), $types)) {
    $build['#cache']['max-age'] = 0;
    \Drupal::service('page_cache_kill_switch')->trigger();
  }
}

Это единственный способ? Я ожидаю, что у меня будет более чистый способ, в моем Конкурс.php возможно? Ждем возможных ответов!

4uk4 avatar
флаг cn
Непонятно, что вы спрашиваете. Динамический кэш страниц учитывает max-age = 0, поэтому нет более простого способа отключить его. Вы имеете в виду [Внутренний кэш страниц] (https://www.drupal.org/docs/administering-a-drupal-site/internal-page-cache)? Только если вы включили этот модуль, вам понадобится дополнительный переключатель уничтожения. Или вы имеете в виду заголовки ответов для управления кешем браузера?
Stef Van Looveren avatar
флаг cn
Спасибо за ответ. Извините, я имею в виду как внутренний кеш страниц, так и внутренний динамический кеш страниц. Будем считать, что оба модуля включены. Мне просто интересно, есть ли еще способ OO для определения кэширования страниц сведений о пользовательских объектах.
4uk4 avatar
флаг cn
Есть еще много неясного. Ваш код проверяет пакет, но, похоже, вы хотите проверить `getEntityTypeId()`. Если это так, вы можете добавить опцию `no_cache: TRUE` к маршрутам сущностей (route_provider в вашем классе сущностей **Contest**).
Stef Van Looveren avatar
флаг cn
Правильный ответ ниже был именно тем, что я искал. Спасибо.
Рейтинг:2
флаг cn

I was just wondering if there is a more OO way to define the caching of the custom entity detail pages.

This would be extending the route provider you are using now (DefaultHtmlRouteProvider or AdminHtmlRouteProvider), specifying it in the custom entity class

*     "route_provider" = {
*       "html" = "Drupal\mymodule\MyEntityRouteProvider",
*     },

and overriding getCanonicalRoute to add the no_cache option:

protected function getCanonicalRoute(EntityTypeInterface $entity_type) {
  $route = parent::getCanonicalRoute($entity_type);
  $route->setOption('no_cache', TRUE);
  return $route;
}
Stef Van Looveren avatar
флаг cn
Отлично. Я этого не знал. Спасибо.

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

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