如何在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
相关产品推荐
相关产品推荐

