阅读此主题后:How to force browser to reload cached CSS/JS files?
我想知道Symfony中是否有任何内置函数或简单方法,当它发现javascript / css文件已被修改时,通过在链接中附加随机查询字符串或时间戳来自动强制重新加载。 (通常,人们使用use_javascript
函数生成<script>
标记)
答案 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。