在Drupal 7中,您可以通过执行以下操作来创建自定义缓存表:
$schema['custom_table'] = drupal_get_schema_unprocessed('system','cache');
由于Drupal 8中不推荐使用该功能,请帮助我找到相同的功能吗?
答案 0 :(得分:6)
在Drupal 8中,Cache API提供了多个cache backend。缓存分为不同的“缓存区”。如果是DatabaseBackend,则不同的箱子会有不同的表格。但是由后端决定如何实现缓存区。
因此,您不会像在Drupal 7中那样直接与数据库表交互。您需要调用Drupal 8核心提供的CacheBackendInterface实现。
假设您要创建一个带有自定义缓存仓mymodule
的模块mycache
。您应该使用自定义bin名称定义自定义模块对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的原始模式,则应该从Drupal\Core\CacheDatabaseBackend的公共方法schemaDefinition()
获取它。
您可以这样称呼它:
<?php
$schema = \Drupal::cache()->schemaDefinition();
?>