Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Duda sobre Assetic y los assets en las aplicaciones Symfony

12 de mayo de 2015

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

#1

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

12 mayo 2015, 21:58
#2

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

12 mayo 2015, 22:29
#3

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

13 mayo 2015, 9:28
#4

@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

13 mayo 2015, 14:12
#5

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

13 mayo 2015, 17:07
#6

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

16 septiembre 2015, 22:45
#7

@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

17 septiembre 2015, 8:45