mcpField
D
drupal-caching

drupal-caching

github.com/edutrul开发7354 次安装21 周前更新
代码仓库

关于 drupal-caching

面向 Drupal 开发者的缓存技能,涵盖渲染数组的缓存元数据、标签与上下文,以及缓存后端操作和服务注入。

主要功能

  1. 01渲染数组缓存元数据
  2. 02缓存标签与上下文指南
  3. 03缓存后端读写
  4. 04缓存服务注入

适用场景

  1. 01为渲染内容添加缓存元数据
  2. 02按权限或 URL 区分输出
  3. 03读取并失效缓存数据

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/edutrul/drupal-ai --skill drupal-caching

安装后在 Claude Code 中输入/drupal-caching确认已加载。

附带文件README.md

详细介绍

Drupal 缓存

始终添加缓存元数据。缺少缓存元数据会导致内容过时。

渲染数组中的缓存元数据

$build['content'] = [
  '#markup' => $output,
  '#cache' => [
    'tags' => ['node:' . $node->id(), 'node_list'],
    'contexts' => ['user.permissions', 'url.query_args'],
    'max-age' => Cache::PERMANENT,
  ],
];

缓存标签

标签失效条件
node:{nid}保存或删除节点 {nid} 时
node_list创建或删除任何节点时
user:{uid}保存用户 {uid} 时
taxonomy_term:{tid}保存术语 {tid} 时
config:{name}保存配置对象 {name} 时

缓存上下文

上下文因何而异
user.permissions用户的权限(优先于 user)
user.roles用户的角色
url.pathURL 路径
url.query_args查询参数
languages当前语言

读取/写入缓存

$cached = $this->cacheBackend->get('my_module:my_key');
if ($cached !== FALSE) {
  return $cached->data;
}

$this->cacheBackend->set('my_module:my_key', $data, Cache::PERMANENT, ['node_list']);
$this->cacheBackend->set('my_module:my_key', $data, \Drupal::time()->getRequestTime() + 3600, ['node_list']);
$this->cacheBackend->delete('my_module:my_key');

Cache::invalidateTags(['node:123', 'node_list']);

注入缓存服务

use Drupal\Core\Cache\CacheBackendInterface;

public function __construct(
  private readonly CacheBackendInterface $cacheBackend,
) {}
# services.yml
my_module.my_service:
  arguments: ['@cache.default']

CacheableDependencyInterface

$build['#cache']['tags'] = Cache::mergeTags(
  $build['#cache']['tags'] ?? [],
  $node->getCacheTags()
);

评论

支持 Markdown