在cakephp中强制刷新修改后的JS和CSS文件

Alv*_*aro 8 php cakephp cakephp-3.0

我只读了关于cakephp缓存文件的两个选项:

  • 而是将它们全部缓存
  • 或者你不缓存任何.

我想要介于两者之间.使用版本参数,与我们在任何其他网站上所做的相同的事情:

的script.js?V = 2

这样我们就可以手动甚至自动强制修改文件的加载,同时在没有对它们进行任何更改时进行缓存.

drm*_*nja 4

CakePHP 提供了一种将时间戳应用于 CSS 和 JS 文件等资源的方法,该方法仅在文件更改时刷新。这相当于执行“script.js?v=2”,Cake 会生成类似“script.js?1442387965”的 URL。

在 CakePHP 3.x 中(在 config/app.php 中):-

'Asset' => [
    'force'
]
Run Code Online (Sandbox Code Playgroud)

在 CakePHP 2.x 中(在 app/Config/core.php 中):-

 Configure::write('Asset.timestamp', 'force');
Run Code Online (Sandbox Code Playgroud)

如果您只想在启用调试模式时应用时间戳,请将上述设置为true而不是force

  • 这样做是有成本的,因为 CakePHP [检查每个资产的 filemtime 以生成该时间戳](https://github.com/cakephp/cakephp/blob/master/src/View/Helper/UrlHelper.php#L104- L139)。考虑到覆盖该方法以使用“Configure::read('Site.version')”或类似方法的问题,可能是一个更好的主意。请注意,[使用查询参数可能会影响中间缓存](http://serverfault.com/questions/401201/squid-cannot-cache-static-files-with-query-string)。 (2认同)
  • 至少从 CakePHP 3.7.7 开始,列出的代码不会产生所需的结果。以下配置_确实_生成强制时间戳,添加到 app.php 中的 'Asset' 键中: 'Asset' => [ 'timestamp' => 'force' ] (2认同)