How can I force assetic to render assets each time the page is reloaded (no matter if assets are modified or not)?
More explanation about my issue:
I\'m curr
You should pass to use_controller: false
and compile your assets after you finish
your modification.
If you want to compile your assets:
php app/console assetic:dump
I'm using Assetic's Lessphp filter that caches files too. For myself I've created a class that extends default Assetic's filter and touches every file with current time
<?php
namespace Xxx\AssetsBundle\Assetic\Filter;
use Assetic\Asset\AssetInterface;
use Assetic\Filter\LessphpFilter;
class LessphpNonCachedFilter extends LessphpFilter
{
public function filterLoad(AssetInterface $asset)
{
$root = $asset->getSourceRoot();
$path = $asset->getSourcePath();
$filename = realpath($root . '/' . $path);
if (file_exists($filename)) {
touch($filename);
}
parent::filterLoad($asset);
}
}
And you must set "assetic.filter.lessphp.class" in your parameters section (services.yml):
parameters:
assetic.filter.lessphp.class: Xxx\AssetsBundle\Assetic\Filter\LessphpNonCachedFilter
AFAIK there's no perfect solution for this yet
I use:
php app/console assetic:dump --watch
which will compile your .less files each time it detects a change in any of the .less files referenced on your templates.
To force a compilation you have to make any change in your "main" file (the file that @imports the others). But, the good news are that is just enough to "touch" the file to do that. So you can just manually touch it every time you need:
touch ~/web/css/main.less;
Or, what i usually do is to set up a script that touches this "main" file each 60 seconds or so:
while true; do
sleep 60
touch ~/web/css/main.less
done
This should work on linux and mac.
Hope it helps. At least temporarily :)
I've created a simple script to solve this problem. Please try it out and let me know if it helped.
#!/bin/bash
# assetic-watch: A very simple shell-script to recursively and efficiently
# watch for asset changes and to trigger automatic recompilation.
#
# By Slava Fomin II <s.fomin@betsol.ru>
# Feel free to contact me.
# From Russia with Love.
# Let's make this World a Better place!
# --------------------------------------
#===============#
# CONFIGURATION #
#===============#
# Path relative to "Symfony/src" directory.
# File changes under specified directory will trigger recompilation
# of all assets.
WATCH_PATH="Name/Bundle/NameBundle/Resources/public/css"
# Environment.
ENV="dev"
# Additional options for "app/console".
OPTS=""
# inotifywait events to watch for.
INW_EVENTS="close_write,moved_to,create"
# Optional inotifywait arguments.
INW_OPTS=""
# Relative path to the Symfony root directory.
SYMFONY_PATH="../"
#============#
# PROCESSING #
#============#
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
CONSOLE_PATH="$SCRIPT_DIR/${SYMFONY_PATH}/app/console"
SRC_PATH="$SCRIPT_DIR/${SYMFONY_PATH}/src/$WATCH_PATH"
quietly() { "$@" > /dev/null 2>&1; }
while true; do
quietly inotifywait --recursive -e $INW_EVENTS $INW_OPTS $SRC_PATH
php $CONSOLE_PATH assetic:dump --env=$ENV $OPTS
done
I really hope Symfony developers will address this issue in the future versions of the Assetic bundle. I believe it's a serious limitation.