通过 Assetic 参数化 url 清除资产缓存

Asset cache busting by parametrized url with Assetic

如何在 Symfony 3.2 中通过 Assetic 配置资产版本控制?

在 Symfony 2 中,这可以通过在 framework:templating 中配置包版本来实现,但在 3.

中不再如此

我试过使用以下配置:

framework:
  assets:
    packages:
      css:
        version: '2'
        version_format: '%%s?version=%%s'

在模板中使用时:

{% stylesheets output="css/global.css" "@AppBundle/Resources/assets/scss/frontend.scss" filter="scss" filter="?uglifycss" package="css" %}
    <link rel="stylesheet" href="{{ asset(asset_url) }}">
{% endstylesheets %}

不幸的是,这不会将版本参数附加到资产 url,尽管 Symfony 关于资产的官方文档 suggests

从未使用过 "sub packages",尝试不使用:

parameters:
    app_version: 1.0.0

framework:
    assets:
        version:   '%app_version%'
        version_format: '%%1$s?%%2$s'
        base_urls: ['%your_assets_urls%']

经过进一步研究,我设法解决了这个问题: 调用 asset() 函数时需要指定包名,例如:

{% stylesheets output="css/global.css" "@AppBundle/Resources/assets/scss/frontend.scss" filter="scss" filter="?uglifycss" %}
     <link rel="stylesheet" href="{{ asset(asset_url, 'css') }}">
{% endstylesheets %}

包名“css”需要在config中定义:

framework:
  assets:
  packages:
    css:
      version: '2'
      version_format: '%%s?version=%%s'