【问题标题】:Symfony 2 reload translation cacheSymfony 2 重新加载翻译缓存
【发布时间】:2016-08-16 10:23:35
【问题描述】:

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

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

【问题讨论】:

    标签: symfony translation


    【解决方案1】:

    我这样做

    $cacheDir = dirname($this->getParameter('kernel.cache_dir'));
    
    foreach (['prod', 'dev'] as $env) {
        array_map('unlink', glob("$cacheDir/$env/translations/*"));
    }
    

    【讨论】:

      【解决方案2】:

      仅仅为了完成已经提供的答案,如果您需要考虑新的翻译文件,删除 cache/ 中的 translations 文件夹是不够的。

      为此,您还需要删除缓存所有资源和资产文件路径的文件。 它的名称取决于环境:appDevDebugProjectContainer.phpappProdProjectContainer.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 测试。

      【讨论】:

        【解决方案3】:

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

        您可以编写自己的命令,尽管这只检查翻译缓存目录并清除它。默认情况下,它位于子文件夹 translations/ 中,应该可以通过这样的查找器轻松访问:

        $finder = (new Finder)->in($cacheDir.'/'.$env)->directories()->name('translations');
        foreach ($finder as $translationsDir) {
           rmdir($translationDir->getPathname();
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-12-22
          • 1970-01-01
          • 1970-01-01
          • 2016-10-04
          • 2017-05-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多