【发布时间】:2016-08-16 10:23:35
【问题描述】:
我正在使用 Symfony2(很快 3),我们得到了一些存储在数据库中的翻译。 这意味着当我们运行 cache:clear 时,翻译将从数据库中获取并存储在缓存中(在磁盘上)。 这也意味着用户可以直接在数据库中更改翻译,但这些更改不会立即可见。
有没有办法只清除 Symfony 中的翻译缓存文件?不刷新整个缓存?
【问题讨论】:
标签: symfony translation
我正在使用 Symfony2(很快 3),我们得到了一些存储在数据库中的翻译。 这意味着当我们运行 cache:clear 时,翻译将从数据库中获取并存储在缓存中(在磁盘上)。 这也意味着用户可以直接在数据库中更改翻译,但这些更改不会立即可见。
有没有办法只清除 Symfony 中的翻译缓存文件?不刷新整个缓存?
【问题讨论】:
标签: symfony translation
我这样做
$cacheDir = dirname($this->getParameter('kernel.cache_dir'));
foreach (['prod', 'dev'] as $env) {
array_map('unlink', glob("$cacheDir/$env/translations/*"));
}
【讨论】:
仅仅为了完成已经提供的答案,如果您需要考虑新的翻译文件,删除 cache/ 中的 translations 文件夹是不够的。
为此,您还需要删除缓存所有资源和资产文件路径的文件。
它的名称取决于环境: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();
}
【讨论】: