Создание пользовательской таблицы кеша в установочном файле с Drupal 8?

В Drupal 7 вы можете создать собственную таблицу кеша, выполнив что-то вроде этого:

$schema['custom_table'] = drupal_get_schema_unprocessed('system','cache');

Поскольку эта функция устарела в Drupal 8, пожалуйста, не могли бы вы помочь мне найти эквивалентную функциональность?


person Mike Jones    schedule 14.02.2017    source источник


Ответы (1)


Следуйте дизайну Drupal 8

В Drupal 8 Cache API предоставляет несколько кэширования. Кэш был разделен на разные "Корзины кэша". Если это DatabaseBackend, для разных бинов будут разные таблицы. Но это зависит от бэкэнда, как реализовать вашу корзину кэша.

Таким образом, вы не собираетесь напрямую взаимодействовать с таблицами базы данных, как в Drupal 7. Вам необходимо вызвать CacheBackendInterface предоставляется ядром Drupal 8.

Создать пользовательский кэш-бункер

Допустим, вы собираетесь создать модуль mymodule со специальной корзиной кэша mycache. Вы должны определить зависимость вашего пользовательского модуля от CacheBackendInterface с помощью вашего собственного имени корзины.

В вашем файле mymodule.services.yml должен быть такой раздел:

cache.mycache:
  class: Drupal\Core\Cache\CacheBackendInterface
  tags:
    - { name: cache.bin }
  factory: cache_factory:get
  arguments: [mycache]

Затем, установив модуль, зависимость от корзины кэша будет передана реализации CacheBackendInterface. Запрошенная ячейка кэша будет создана.

Используйте кэш-бункер

Затем вы можете использовать свой собственный кеш-бункер следующим образом:

<?php

$data = NULL;
if ($cache = \Drupal::cache('mycache')->get($cid)) {
  $data = $cache->data;
}
else {
  $data = mymodule_complicated_calculation();
  \Drupal::cache('mycache')->set($cid, $data);
}

?>

Принудительное использование серверной части базы данных

Если вы хотите, чтобы ваш кеш использовал базу данных, вы можете добавить это в свой файл настроек:

 $settings['cache']['bins']['mycache'] = 'cache.backend.database';

Если вы настаиваете... Попробуйте это

ХОРОШО. Если вы настаиваете на получении необработанной схемы DatabaseBackend, вы должны получить ее из общедоступного метода schemaDefinition() из Drupal\Core\CacheDatabaseBackend.

Вы можете назвать это так:

<?php

$schema = \Drupal::cache()->schemaDefinition();

?>
person Koala Yeung    schedule 15.02.2017
comment
Хорошо знать. И не могли бы вы помочь проголосовать за это и отметить это как правильный ответ (щелкнув галочку рядом с заголовком)? Мне нужно это, чтобы помочь с документацией по Drupal 8. Спасибо! - person Koala Yeung; 16.02.2017
comment
Кроме того, любопытно, какое решение вы использовали? - person Koala Yeung; 16.02.2017
comment
На самом деле я использовал контейнеры для кеша, но все 3 метода, которые вы упомянули, работают. - person Mike Jones; 16.02.2017