关于 drupal-caching
面向 Drupal 开发者的缓存技能,涵盖渲染数组的缓存元数据、标签与上下文,以及缓存后端操作和服务注入。
主要功能
- 01渲染数组缓存元数据
- 02缓存标签与上下文指南
- 03缓存后端读写
- 04缓存服务注入
适用场景
- 01为渲染内容添加缓存元数据
- 02按权限或 URL 区分输出
- 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.path | URL 路径 |
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