使用 Drupal 8 在安装文件中创建自定义缓存 table?
Creating custom cache table in install file with Drupal 8?
在 Drupal 7 中,您可以通过执行以下操作来创建自定义缓存 table:
$schema['custom_table'] = drupal_get_schema_unprocessed('system','cache');
由于该功能在 Drupal 8 中已被弃用,请问您能帮我找到等效的功能吗?
遵循 Drupal 8 设计
在 Drupal 8 中,Cache API provides multiple cache backend. Cache got separated into different "Cache Bin". If it is DatabaseBackend,不同的 bin 会有不同的表。但这取决于后端如何实现您的 Cache Bin。
因此您不会像在 Drupal 7 中那样直接与数据库表交互。您需要调用 Drupal 8 核心提供的 CacheBackendInterface 实现。
创建自定义缓存区
假设您要创建一个带有自定义缓存箱 mycache
的模块 mymodule
。您应该使用自定义 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的raw schema,你应该从Drupal\Core\CacheDatabaseBackend.
的public方法schemaDefinition()
获取
你可以这样称呼它:
<?php
$schema = \Drupal::cache()->schemaDefinition();
?>
在 Drupal 7 中,您可以通过执行以下操作来创建自定义缓存 table:
$schema['custom_table'] = drupal_get_schema_unprocessed('system','cache');
由于该功能在 Drupal 8 中已被弃用,请问您能帮我找到等效的功能吗?
遵循 Drupal 8 设计
在 Drupal 8 中,Cache API provides multiple cache backend. Cache got separated into different "Cache Bin". If it is DatabaseBackend,不同的 bin 会有不同的表。但这取决于后端如何实现您的 Cache Bin。
因此您不会像在 Drupal 7 中那样直接与数据库表交互。您需要调用 Drupal 8 核心提供的 CacheBackendInterface 实现。
创建自定义缓存区
假设您要创建一个带有自定义缓存箱 mycache
的模块 mymodule
。您应该使用自定义 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的raw schema,你应该从Drupal\Core\CacheDatabaseBackend.
的public方法schemaDefinition()
获取
你可以这样称呼它:
<?php
$schema = \Drupal::cache()->schemaDefinition();
?>