Следуйте дизайну 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