我正在使用 Symfony2(即将推出 3),我们得到了一些存储在数据库中的翻译。 这意味着当我们运行cache:clear时,将从数据库中获取翻译并将其存储在缓存中(在磁盘上)。 这也意味着用户可以直接在数据库中更改翻译,但这些更改不会立即可见。
有没有办法仅清除Symfony中的翻译缓存文件?不刷新整个缓存?
我就是这样做的
$cacheDir = dirname($this->getParameter('kernel.cache_dir'));
foreach (['prod', 'dev'] as $env) {
array_map('unlink', glob("$cacheDir/$env/translations/*"));
}
仅为了完成已提供的答案,如果您需要考虑新的翻译文件,则删除
translations
中的 cache/
文件夹是不够的。
为此,您还需要删除缓存所有资源和资产文件路径的文件。 它的名称取决于环境:
appDevDebugProjectContainer.php
或appProdProjectContainer.php
。
所以基于@Atmarama 的回答:
$cacheDir = dirname($this->getParameter('kernel.cache_dir'));
foreach (['prod', 'dev'] as $env) {
array_map('unlink', glob("$cacheDir/$env/translations/*"));
array_map('unlink', glob("$cacheDir/$env/app*ProjectContainer.php"));
}
使用 Symfony 3.3.x 进行测试。
运行
./bin/console cache:clear
不提供任何关于应删除哪个缓存文件夹的选项。它只是清除整个文件夹,并且只能使用选项配置处理预热。有关参考,请参阅 FrameworkBundle 中的 CacheClearCommand。
您可以编写自己的命令,尽管该命令仅检查翻译缓存目录并清除它。默认情况下,它位于子文件夹
translations/
中,应该可以使用如下查找器轻松访问该子文件夹:
$finder = (new Finder)->in($cacheDir.'/'.$env)->directories()->name('translations');
foreach ($finder as $translationsDir) {
rmdir($translationDir->getPathname();
}