Symfony 2 重新加载翻译缓存

问题描述 投票:0回答:3

我正在使用 Symfony2(即将推出 3),我们得到了一些存储在数据库中的翻译。 这意味着当我们运行cache:clear时,将从数据库中获取翻译并将其存储在缓存中(在磁盘上)。 这也意味着用户可以直接在数据库中更改翻译,但这些更改不会立即可见。

有没有办法清除Symfony中的翻译缓存文件?不刷新整个缓存?

php symfony translation
3个回答
3
投票

我就是这样做的

$cacheDir = dirname($this->getParameter('kernel.cache_dir'));

foreach (['prod', 'dev'] as $env) {
    array_map('unlink', glob("$cacheDir/$env/translations/*"));
}

2
投票

仅为了完成已提供的答案,如果您需要考虑新的翻译文件,则删除

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 进行测试。


0
投票

运行

./bin/console cache:clear
不提供任何关于应删除哪个缓存文件夹的选项。它只是清除整个文件夹,并且只能使用选项配置处理预热。有关参考,请参阅 FrameworkBundle 中的 CacheClearCommand

您可以编写自己的命令,尽管该命令仅检查翻译缓存目录并清除它。默认情况下,它位于子文件夹

translations/
中,应该可以使用如下查找器轻松访问该子文件夹:

$finder = (new Finder)->in($cacheDir.'/'.$env)->directories()->name('translations');
foreach ($finder as $translationsDir) {
   rmdir($translationDir->getPathname();
}
© www.soinside.com 2019 - 2024. All rights reserved.