【问题标题】:Creating custom cache table in install file with Drupal 8?使用 Drupal 8 在安装文件中创建自定义缓存表?
【发布时间】:2017-02-14 23:47:04
【问题描述】:

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

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

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

【问题讨论】:

    标签: drupal drupal-modules drupal-8


    【解决方案1】:

    遵循 Drupal 8 设计

    在 Drupal 8 中,Cache API 提供了多个 cache backend。缓存被分成不同的“缓存箱”。如果是DatabaseBackend,不同的bin会有不同的table。但是如何实现您的缓存箱取决于后端。

    因此,您不会像在 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 的原始 schema,你应该从 Drupal\Core\CacheDatabaseBackend 的公共方法 schemaDefinition() 中获取。

    你可以这样称呼它:

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

    【讨论】:

    • 很高兴知道。请您帮忙投票并将其标记为正确答案(通过单击标题附近的“勾号”)?我需要这个来帮助在这里做 Drupal 8 文档。谢谢!
    • 另外,很好奇,您使用的是哪种解决方案?
    • 我实际上使用了缓存箱,但您提到的所有 3 种方法都有效。
    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 2017-09-03
    • 2019-02-12
    • 1970-01-01
    • 2016-10-05
    • 2013-01-26
    • 2017-12-31
    • 1970-01-01
    相关资源
    最近更新 更多