如何在Symfony中重新加载javascript / css?

时间:2010-02-25 15:00:56

标签: php javascript css caching symfony-1.4

阅读此主题后:How to force browser to reload cached CSS/JS files?

我想知道Symfony中是否有任何内置函数或简单方法,当它发现javascript / css文件已被修改时,通过在链接中附加随机查询字符串或时间戳来自动强制重新加载。 (通常,人们使用use_javascript函数生成<script>标记)

2 个答案:

答案 0 :(得分:3)

没有内置机制,但是一点创造力意味着您可以在代码中的任何位置执行此操作,从view.yml到layout.php,再到每个单独的操作。

view.yml方法很简单:

应用/前端/配置/的view.yml:

  stylesheets:    [main?v=<?php echo time() ?>, reset?v=<?php echo time() ?>, layout?v=<?php echo time() ?>]

虽然我认为这有点过于活跃,但我倾向于使用SVN修订版或整个项目版本号:

  stylesheets:    [main?v=<?php echo sfConfig('app_project_version') ?>, reset?v=<?php echo sfConfig('app_project_version') ?>, layout?v=<?php echo sfConfig('app_project_version') ?>]

apps / frontend / config / app.yml 中设置了app_project_version。 layout.php和actionSuccess.php的方法应该很容易从这里开始:

<?php use_stylesheet('blah?v='.sfConfig::get('app_project_version')); ?>

答案 1 :(得分:2)

而不是为您包含的每个样式表设置版本,不管是否使用view.yml或use_stylesheet()方法,最好自动为所有包含的样式表完成。您需要实现此辅助方法和 在您的应用程序settings.yml中包含帮助程序,以便它可用于操作。

`

function include_versioned_stylesheets()
{
    $response = sfContext::getInstance()->getResponse();
    sfConfig::set('symfony.asset.stylesheets_included', true);
    $html = '';
    foreach ($response->getStylesheets() as $file => $options) {
        $filepath = sfConfig::get('sf_web_dir') . '/' .  stylesheet_path($file);
        if(file_exists($filepath)) {
            $file .= '?v=' . filectime($filepath);
        }
        $html .= stylesheet_tag($file, $options);
    }
    echo $html;
}

`

你的layout.php中的

在你的标题区域内调用它。确保没有进一步调用include_stylesheets(),因为这是它的扩展版本。 同样可以使用include_javascripts。