3

阅读此线程后:如何强制浏览器重新加载缓存的 CSS/JS 文件?

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

4

2 回答 2

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') ?>]

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

<?php use_stylesheet('blah?v='.sfConfig::get('app_project_version')); ?>
于 2010-02-25T15:56:12.280 回答
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 也可以做到这一点。

于 2012-04-26T13:46:56.517 回答