2012-02-23 10 views
14

Me gustaría configurar globalmente el directorio de salida de donde assetic vuelque mis archivos JS. Actualmente, siempre van al web/js/*. Quiero cambiar esto a web/js/compiled/*.Configurar el directorio de salida para Assetic en Symfony2

Es posible especificar esto en un nivel por archivo: http://symfony.com/doc/2.0/cookbook/assetic/asset_management.html#dumping-asset-files

Parece que no puede encontrar una manera de establecer este a nivel mundial a través de mi Symfony aplicación. ¿Algún parámetro de configuración que me falta?

ACTUALIZACIÓN

encontrado un parámetro de configuración Assetic llamado write_to. Establecer esto en config.yml hace que la línea de comando assetic:dump descargue archivos al nuevo directorio, pero dentro de los archivos twig la var asset_url todavía apunta a la ruta original.

+0

¿alguna vez llegar a una solución? Hubiera supuesto que la opción 'read_from' en la configuración sería lo que estamos buscando. Sin embargo, no puedo obtener esa opción para hacer nada. Independientemente de lo que establezca el parámetro read_from en, mi aplicación usa la ruta predeterminada. – kmfk

+0

@kmfk Nada todavía. En este momento, solo estamos configurando el parámetro 'output' para cada bloque' javascripts', pero eso no es para nada ideal. – anushr

+0

Sí, he descargado mis activos directamente en nuestro depósito S3 y quería que el entorno de producción leyera archivos desde allí. Mientras el entorno dev se volca a una carpeta local y de la misma manera, mis plantillas deberían leerse desde esa carpeta mientras está en nuestro servidor de desarrollo Terminé revisando el entorno en el controlador y pasando una var a la plantilla para agregar el prefijo 'asset_url' para el cdn. No es ideal, pero cumple su función. – kmfk

Respuesta

4

Puede establecer la ruta del activo (assets_base_urls) para ramitas en una ruta estática, en lugar de usar la ruta relativa. En el archivo de config.yml, se vería similar a esto:

framework: 
    templating: 
     engines: ['twig'] 
     assets_base_urls: 
      http: [http://path.to-cdn.com] 

Esto afectará asset_url de Assetic así como el método de la ramita asset(). Este último puede o no ser deseado.

16

Debe usar la propiedad write_to.

en mi configuración para exemple utilizo

# Assetic Configuration 
assetic: 
    debug:   %kernel.debug% 
    use_controller: %kernel.debug% 
    read_from:  %kernel.root_dir%/Resources/views/ 
    write_to:  %kernel.root_dir%/../web/static/ 

Su ouput cadena empieza allí donde termina write_to

para exemple

{% javascripts filter="closure" output='js/main.js' 

...

{% stylesheets filter='compass,?cssrewrite' 
    'default/static/sass/screen.scss' 
    output='css/screen.css' 
%} 

ambos serán colocados respectivamente en /web/static/js/main.js y /web/static/css/screen.css

assets_base_urls se utiliza para especificar la URL de la base para ser utilizado para los recursos a los que se hace referencia desde las páginas http y ssl (https).

!!assets_base_urls también es utilizado por {% images %} como la raíz antes de output valor, pero no tiene en cuenta {% images %}write_to cuando representación HTML (sólo cuando vertimiento) así que es mejor no usar write_to y se basan únicamente en output valor. Más sobre esto en my other post on stackoverflow y en this post on AsseticBundle's github.

+0

Symfony tan complicado :) – userlond

-4

probar este commande $ app/console --env=prod assetic:dump web/ tiene juste para cambiar la dirección URL que desea que raher 'web /'

2

This GitHub issue comment me ayudaron con este tema. Mientras está en desarrollo, sus activos seguirán pasando por el controlador, pero en producción, las URL serán las que usted desee.

Ejemplo config.yml:

assetic: 
    write-to: %kernel.root_dir%/../web/assets 
    ... 
framework: 
    ... 
    templating: 
     engines: ['twig'] 
     packages: 
      assetic: 
       base_urls: '/assets' 

ejemplo en su plantilla:

{% block javascripts %} 
    {% javascripts '@jquery' '@bootstrap_js' '@backbone' '@handlebars' combine=true package='assetic' %} 
    <script src="{{ asset_url }}"></script> 
    {% endjavascripts %} 
{% endblock %} 

en cuenta que hay que añadir el paquete = atributo 'Assetic' en la etiqueta de scripts de Java. Este es un buen compromiso de la OMI porque no romperá los activos de otros paquetes ya que la solución de kmfk sí lo hará.

2

Solo una nota rápida sobre esto. Si usa assets_base_urls, para especificar una URL base relativa, esto solo funciona antes de Symfony 2.7, debido a la introducción del nuevo componente de activos en esa versión. Para más información sobre cómo cambiar esta disponible en http://symfony.com/blog/new-in-symfony-2-7-the-new-asset-component, pero el largo y corto de él es que:

framework: 
    templating: 
     assets_base_urls: 
      http: ['/some-relative-url'] 
      ssl: ['/some-relative-url'] 

se convierte en:

framework: 
    assets: 
     base_path: /some-relative-url 
Cuestiones relacionadas