template asset symfony twig assetic

template - Con Assetic/Twig/Symfony2, ¿puedo definir librerías frontales?



symfony twig block (3)

Estoy usando Symfony2, con Assetic y Twig. Tengo varias bibliotecas de frontend: Backbone, jQuery, jQuery UI y Bootstrap. Tanto Bootstrap como jQuery UI incluyen archivos CSS y JS.

¿Existe alguna manera de poder definir los recursos que necesitan incluir (incluidas las dependencias) y, a continuación, en Twig / Assetic solo incluir todos esos recursos en una etiqueta? Lo que buscaría es algo así como:

// config.yml <!-- DOES NOT WORK --> assetic: resources: jquery: js: /filepath/to/jquery.js jquery_ui: dependencies: jquery css: /filepath/to/jqueryui.css js: /filepath/to/jqueryui.js less: js: /filepath/to/less.js bootstrap: dependencies: { less, jquery } js: /filepath/to/bootstrap.js css: /filepath/to/bootstrap.css backbone: dependencies: { jquery } js: { /filepath/to/underscore.js, /filepath/to/backbone.js } // view.html.twig {% use jquery_ui %} {% use bootstrap %} // outputs all js and css for jQuery, jQueryUI, Less, Backbone, and Bootstrap

Encontré un par de preguntas relacionadas:

pero ninguno parece implicar la definición de los recursos en config.yml. En cambio, los definen en base.html.twig pero eso es lo que trato de evitar.

Intenté usar la etiqueta de use en Twig, definiendo una plantilla llamada ''jquery_ui'' y usando {% stylesheets %} y {% javascripts %} en ese bloque y luego en base.html.twig poniendo {% use "jquery-ui.html" %} . Sin embargo, el use no importará la plantilla porque tiene un cuerpo.


Aunque existe un soporte para definir bibliotecas front-end, desafortunadamente no hay soporte para la resolución de dependencias. También debe definir su CSS y JavaScript por separado.

Lo que he estado haciendo es crear un archivo separado en /app/config/ llamado assets.yml e incluirlo en la configuración principal para mantener las cosas limpias.

assetic: assets: jquery: inputs: - ''%kernel.root_dir%/Resources/public/js/jquery.js'' - ''%kernel.root_dir%/Resources/public/js/jquery-ui.js'' my_lib: inputs: - ''%kernel.root_dir%/Resources/public/js/my-custom-lib.js'' - ...

Tenga en cuenta que ''% kernel.root_dir%'' se resuelve en el directorio de la app de manera predeterminada en Symfony2. Ahora puede usar los activos en sus plantillas Twig.

{% block javascripts %} {% javascripts ''@jquery'' ''@my_lib'' output="js/jquery.js" %} <script type="text/javascript" src="{{ asset_url }}"></script> {% endjavascripts %} {% endblock %}

Lo mismo podría hacerse con los archivos CSS. El ejemplo también demuestra por qué no es posible definir CSS y JavaScript como un único activo.


Es posible que desee verificar Cartero, que le permite definir "paquetes de activos", incluidas las dependencias, y luego incluir esos paquetes en su página.

https://github.com/rotundasoftware/cartero

Tendría que escribir un Symfony2 Hook, pero eso no sería demasiado difícil.


La solución más simple es colocarlos en los directorios apropiados en el directorio web / ya que esta es la raíz de su sitio que se sirve para todos sus paquetes de Symfony.