Hola a todos, y antes de nada, gracias a todos los que hacéis este sitio posible.
Tengo una pregunta un poco "novata" por así decirlo, pero que no consigo responder por mi mismo.
Estoy usando assetic en mi proyecto para gestionar mis css, js e imagenes. Hasta aquí todo bien. Con los JavaScript ningún problema, ni las imagenes. Pero los CSS cuando se enlazan con la notacion @Bundle
, y se combina con cssrewrite
hay un error conocido que genera los enlaces a las imágenes de forma incorrecta.
Bien, ningún problema, enlazo mis css como:
{% stylesheets "bundles/app/css/micss.css" filter="cssrewrite" output="css/micompiladocss.css" %}
Pero evidentemente para que bundles/app/css/micss.css
exista necesito hacer assets:install
cada vez que cambio mi CSS. (No puedo hacer assets:install --symlink
por que trabajo bajo Windows 7)
Mi pregunta es: ¿por qué tengo que hacer assets:install
si en verdad estoy usando assetic? ¿No sería más normal tener que usar assetic:dump
o assetic:watch
?
¿Alguien que me aclare mis dudas entre assets y assetic de una vez?
Gracias de antemano
Respuestas
Creo que debe haber algún problema de configuración porque en condiciones normales todo funciona sin tener que ejecutar ningún comando.
Más concretamente, en el entorno de desarrollo no hace falta ejecutar ningún comando de Assetic porque los archivos en realidad no se generan físicamente, sino que se sirven a través de un controlador especial definido por Assetic. Para que esto sea así, en tu archivo config_dev.yml
tienes que tener esto:
assetic: use_controller: true
Si en vez de true
tienes %kernel.debug%
también vale, ya que en el entorno de desarrollo esa variable vale true
.
En el entorno de producción es donde sí que se generan esos archivos CSS físicamente y por eso tienes que generar el comando assetic:dump
.
Si mi respuesta no es exactamente lo que estabas preguntando, dímelo y te ayudo en lo que pueda para resolver tus dudas.
@javiereguiluz
Es normal lo que haces @SoutlinK, de igual manera trabajo yo.
Aunque estés usando assetic, los archivos a los que haces referencia estan en web/bundles/tu_app/css/xxx.css
por lo que si haces una modificación en tu archivo original alojado por ejemplo en src/TuAppBundle/Resources/public/css/xxx.css
assetic no tiene conocimiento de este cambio, y para lograr que assetic vea el cambio debes usar el comando assets:install
para que copie tu nuevo archivo a web.
Quizas esto es algo que solo nos afecta a los que usamos windows, ya que no hay soporte para enlaces simbolicos a los assets (anque en symfony 2.3 si que lo habia, en las ultimas versiones lo quitaron).
@manuel_j555
Gracias por responder @javiereguiluz y @manuel_j555
@javiereguiluz, en el config_dev.yml
tengo
assetic: use_controller: true
Que es como viene por defecto en una nueva instalación de symfony
Ahora como bien dice @manuel_j555 yo llamo a mis archivos css como web/bundles/tu_app/css/xxx.css
por el problema con cssrewrite
. Si llamo a los archivos como @AppBundle/public/css/micss.css
no tengo ningún problema por que ahí el controlador que maneja los assets si funciona correctamente, pero si los enlazo directamente no funciona.
Aun usando:
{% stylesheets "bundles/app/css/micss.css" filter="cssrewrite" output="css/micompiladocss.css" %}
¿En el entorno de desarrollo debería pasar por el controlador de assetic?
Gracias de nuevo por la respuesta
@SoutlinK
@SoutlinK (No puedo hacer assets:install --symlink
por que trabajo bajo Windows 7)
Si puedes usarlo, pero debes ejecutar el simbolo de sistema, o lo que uses, como administrador.
Saludos
@AlbertoVioque
Cierto @AlbertoVioque, justo hoy a la mañana buscando más información sobre el tema lo he visto. Pero aún así, no se si eso de tener que instalar los assets es lo correcto.
@SoutlinK
Hola, y si fuera el caso de ir a producción cómo seria para usar los CSS en Assetic y minificarlos y demas.
@KarloxMartinez
@KarloxMartinez solo tienes que ejecutar el comando php app/console assetic:dump --env=prod
en el servidor una vez y ya se minimizan, compilan y combinan todos los archivos CSS. Este comando normalmente se ejecuta como parte del script de deploy de las aplicaciones, así que no hay que acordarse ni preocuparse de el.
@javiereguiluz