You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Symfony 5.4中清除带标签的Twig缓存片段?

解决Symfony 5.4中Twig缓存标签失效的问题

你遇到的问题核心是注入了错误的缓存池实例——Twig的{% cache %}标签使用的是独立的twig.cache缓存池,而非默认的cache.app(也就是你自动注入的TagAwareCacheInterface实例)。以下是正确的实现方式:

1. 正确注入Twig专用缓存池

在控制器或服务中,通过指定服务IDtwig.cache来注入对应的TagAwareCacheInterface实例:

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Cache\TagAwareCacheInterface;
use Symfony\Component\DependencyInjection\Attribute\Autowire;

class CustomerController extends AbstractController
{
    public function invalidateCustomerCache(
        #[Autowire(service: 'twig.cache')] TagAwareCacheInterface $twigCache
    ): Response {
        // 失效所有带有`customer`标签的Twig缓存
        $twigCache->invalidateTags(['customer']);

        return $this->redirectToRoute('customer_list');
    }
}

如果需要全局简化注入,也可以在config/services.yaml中配置别名:

services:
    # 给Twig缓存池设置别名,后续注入可直接使用该别名
    TwigCachePool: '@twig.cache'

之后控制器中就可以直接注入TwigCachePool $twigCache。

2. 验证Twig缓存配置(可选)

确保你的Twig配置使用的是支持标签的缓存池。在config/packages/twig.yaml中:

twig:
    # 若使用默认文件系统缓存,Symfony会自动启用标签支持
    cache: '%kernel.cache_dir%/twig'
    # 或者指定自定义的标签化缓存池
    # cache: cache.twig

如果使用自定义缓存池,需在config/packages/cache.yaml中启用标签:

framework:
    cache:
        pools:
            cache.twig:
                adapter: cache.adapter.filesystem
                tags: true # 必须开启标签支持

内容的提问来源于stack exchange,提问作者fistameeny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:52:05