Symfony2 assets versioning by file
assets, caching, php, symfony, twig
Solution
After many days searching I found the packages option on `AsseticBundle`
http://symfony.com/doc/2.0/reference/configuration/framework.html#full-default-configuration
Using that config option I could do something like this:
{% javascripts file package='packageName' %}
or
{{asset(file,packageName)}}
Sample:
config.yml
framework:
templating:
engines: ['twig']
assets_version: %assets_version%
assets_version_format: "stv%%2$s/%%1$s"
packages:
css:
version: 6.1
version_format: "stv%%2$s/%%1$s"
jsApp:
version: 4.2
version_format: "stv%%2$s/%%1$s"
sometemplate.html.twig
<link rel=stylesheet href='{{ asset('bundles/webapp/css/funCommon.css','css') }}'>
{% javascripts 'bundles/webapp/js/app.js'
'bundles/webapp/js/utils.js'
filter='?closure'
package='jsApp'
%}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
The output of this is:
<link rel=stylesheet href="http://static.domain.com/stv6.1/css/HASH.css">
<script src="http://static.domain.com/stv4.2/js/HASH.js"></script>
For me that was the simplest way to manage assets version by file.
Problem
Question Is it possible on Symfony2 use assets_version by file? Background We are using assets_version and assets_version_format to manage the files version and force the cache update on CDN's and browser cache. This is working like charm!, but, we found that there is only one `assets_version` parameters for all the static resources used. That is a problem since our webapp, has a long amount of static resources and we are deploying changes to prod environment daily. This situation kills the cache. :( This is our current config: config.yml ``` framework: templating: engines: ['twig'] assets_version: %assets_version% assets_version_format: "stv%%2$s/%%1$s" # Assetic Configuration assetic: debug: %kernel.debug% use_controller: false # java: /usr/bin/java filters: cssrewrite: ~ closure: jar: %kernel.root_dir%/java/compiler.jar yui_css: jar: %kernel.root_dir%/java/yuicompressor-2.4.6.jar ``` sometemplate.html.twig ``` {% stylesheets 'bundles/webapp/css/funCommon.css' 'bundles/webapp/css/funMobile.css' filter='?yui_css' %} <link rel=stylesheet href='{{ asset_url }}'> {% endstylesheets %} {% javascripts 'bundles/webapp/js/app.js' 'bundles/webapp/js/utils.js' filter='?closure' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} {% javascripts 'bundles/webapp/js/moduleX.js' 'bundles/webapp/js/utilsX.js' filter='?closure' %} <script src="{{ asset_url }}"></script> {% endjavascripts %} ``` When I change any css file or a module JS or any other file, all paths are changed. I would like to manage the version parameter of assets_version_format by parameter of javascript/stylesheet twig tag. This is what I'm looking for: ``` {% javascripts 'bundles/webapp/js/app.js' 'bundles/webapp/js/utils.js' filter='?closure' **version='XX'** %} <script src="{{ asset_url }}"></script> {% endjavascripts %} ```