使用Drupal 8在安装文件中创建自定义缓存表?

Mik*_*nes 3 drupal drupal-8 drupal-modules

在Drupal 7中,您可以通过执行以下操作来创建自定义缓存表:

$schema['custom_table'] = drupal_get_schema_unprocessed('system','cache');
Run Code Online (Sandbox Code Playgroud)

由于该功能在Drupal 8中已弃用,请您帮我找到相同的功能吗?

Koa*_*ung 8

按照Drupal 8设计

在Drupal 8中,Cache API提供了多个缓存后端.缓存被分成不同的"缓存仓".如果是DatabaseBackend,则不同的bin将有不同的表.但是后端如何实现你的Cache Bin.

因此,您不会像在Drupal 7中那样直接与数据库表交互.您需要调用Drupal 8核心提供的CacheBackendInterface实现.

创建自定义缓存仓

假设您要创建一个mymodule带有自定义缓存bin 的模块mycache.您应该使用自定义bin名称定义自定义模块对CacheBackendInterface的依赖性.

在您的mymodule.services.yml文件中,应该有这样的部分:

cache.mycache:
  class: Drupal\Core\Cache\CacheBackendInterface
  tags:
    - { name: cache.bin }
  factory: cache_factory:get
  arguments: [mycache]
Run Code Online (Sandbox Code Playgroud)

然后通过安装模块,对缓存仓的依赖性将传递给CacheBackendInterface实现.将创建请求的缓存仓.

使用缓存仓

然后你可以使用这样的自定义缓存bin:

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)

强制使用数据库后端

如果要强制缓存使用数据库,可以将其添加到设置文件中:

 $settings['cache']['bins']['mycache'] = 'cache.backend.database';
Run Code Online (Sandbox Code Playgroud)

如果你坚持......试试这个

好.如果你坚持要获得DatabaseBackend的原始模式,你应该从Drupal\Core\CacheDatabaseBackend的公共方法schemaDefinition()中获取它.

你可以这样称呼它:

<?php

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

?>
Run Code Online (Sandbox Code Playgroud)