vencimientos tributario personas naturales formulario exterior estatuto dian declaracion articulo anual activos symfony less assetic

symfony - tributario - formulario 160 dian excel



¿Cómo puedo forzar a assetic a presentar activos cada vez que la página se recarga? (4)

¿Cómo puedo forzar a assetic a presentar activos cada vez que se recargue la página (sin importar si los activos están modificados o no)?

Más explicaciones sobre mi problema:

Actualmente estoy trabajando en un proyecto de Symfony2 donde uso Assetic para administrar y compilar archivos .less. Tengo todo para que funcione bien, pero tengo un pequeño problema que me gustaría solucionar.

En config.yml, establecí el asset_controller_activo en verdadero.

# Assetic Configuration assetic: debug: %kernel.debug% use_controller: true

El resultado es que Symfony representa dinámicamente los nuevos archivos .css cada vez que se modifican los archivos .less. Esto es genial.

Mi problema es que utilizo un archivo principal project.less donde importo todos los demás archivos .less

// Import Twitter Bootstrap @import "../../../../../../vendor/twitter/bootstrap/less/bootstrap.less"; // Import Foo @import "foo.less"; ...

me permite mantener una estructura limpia y también importar archivos .less de proveedores, por ejemplo: twitter bootstrap.

En mi plantilla de Twig, solo llamo a este archivo principal.

{% stylesheets ''@ProjectWebBundle/Resources/public/less/project.less'' filter=''less'' %} <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" /> {% endstylesheets %}

Como este archivo .less principal nunca se modifica, Assetic no vuelve a compilar los activos. Es por eso que me gustaría que los archivos no importen si han sido modificados o no.


Debería pasar a use_controller: false y compilar sus activos después de que termine su modificación.

Si desea compilar sus activos:

php app/console assetic:dump


Estoy usando el filtro Lessphp de Assetic que también almacena en caché los archivos. Para mí, he creado una clase que amplía el filtro predeterminado de Assetic y toca cada archivo con la hora actual

<?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); } }

Y debe establecer "assetic.filter.lessphp.class" en la sección de parámetros (services.yml):

parameters: assetic.filter.lessphp.class: Xxx/AssetsBundle/Assetic/Filter/LessphpNonCachedFilter


AFAIK todavía no hay una solución perfecta para esto

Yo suelo:

php app/console assetic:dump --watch

que compilará sus archivos .less cada vez que detecte un cambio en cualquiera de los archivos .less a los que se hace referencia en sus plantillas.

Para forzar una compilación, debe realizar cualquier cambio en su archivo "principal" (el archivo que @impide a los demás). Pero, las buenas noticias son que es suficiente para "tocar" el archivo para hacer eso. Entonces puede tocarlo manualmente cada vez que necesite:

touch ~/web/css/main.less;

O lo que suelo hacer es configurar una secuencia de comandos que toque este archivo "principal" cada 60 segundos más o menos:

while true; do sleep 60 touch ~/web/css/main.less done

Esto debería funcionar en linux y mac.

Espero eso ayude. Por lo menos temporalmente :)


Creé un script simple para resolver este problema. Por favor pruébalo y avísame si te ayudó.

#!/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 <[email protected]> # 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

Realmente espero que los desarrolladores de Symfony aborden este problema en las futuras versiones del paquete de Assetic. Creo que es una limitación seria.