En Symfony2, ¿cuál es la diferencia entre assetic:dumpy assets:install? ¿En qué escenarios debería usarse cada uno de estos comandos y en qué orden (si el orden es relevante)?
De hecho, escribí sobre esto recientemente en un artículo sobre OroCRM, que está basado en Symfony 2. Si quieres algo del contexto / por qué de los diferentes comandos, puede que te resulte interesante.
Hay dos sistemas diferentes para incluir archivos frontend (javascript, css, imágenes, etc.) en una aplicación Symfony. El assets:installcomando vino primero. Este comando buscará todos los paquetes de Symfony en una aplicación para
Resources/public
carpeta. Si lo encuentra, el assets:installcomando copiará o vinculará archivos de Resources/publica web/public/bundle/[bundle-name]. Aquí es donde los enlaces creados con la assetsfunción twig buscarán estos archivos. Esta
<script src="{{ asset('js/script.js') }}" type="text/javascript"></script>
Se convierte en esto
<script src="/bundles/[bundle-name]/js/script.js" type="text/javascript"></script>
Eso es todo lo assetsque hace el sistema. Le permite almacenar sus archivos frontend con el paquete.
El asseticsistema es diferente. Con assetic, enlaza a archivos como este.
{% javascripts '@AcmeFooBundle/Resources/public/js/foo.js' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Hay etiquetas similares para hojas de estilo e imágenes. Tenga en cuenta que le asseticpermite vincular archivos en cualquier paquete. ( @AcmeFooBundle). Assetic también le permitirá vincular a varios archivos en una carpeta con un comodín.
{% javascripts '@AcmeFooBundle/Resources/public/js/*' %}
<script type="text/javascript" src="{{ asset_url }}"></script>
{% endjavascripts %}
Otra diferencia con asseticestá en los enlaces generados. En el devmedio ambiente se verán así.
<script type="text/javascript" src="/app_dev.php/js/foo.js"></script>
<script type="text/javascript" src="/app_dev.php/js/bar.js"></script>
Es decir, las solicitudes de estos archivos se ejecutarán a través del controlador frontal de PHP ( app_dev.php) a través de la configuración de rutas especiales en el asseticpaquete. Esto significa que, cuando está en devmodo, nunca tendrá que deshacerse de sus activos. Se incluyen automáticamente. También le permite aplicar filtros a los archivos. Por ejemplo, lo siguiente aplica el cssrewritefiltro a los archivos extraídos.
{% stylesheets 'bundles/acme_foo/css/*' filter='cssrewrite' %}
<link rel="stylesheet" href="{{ asset_url }}" />
{% endstylesheets %}
Si alguna vez quisiste alterar programáticamente la salida de tus activos frontend, asseticte permite hacerlo escribiendo filtros twig personalizados.
Sin embargo, esto requiere un alto rendimiento. En producción, en lugar de vincular cada archivo individualmente a través de un archivo de controlador frontal PHP, el HTML generado se verá así
<script type="text/javascript" src="/js/as5s31l.js"></script>
De donde as5s31l.jsviene Eso es lo que hace el assetic:dumpcomando. Se combina todos los archivos javascript / css individuales (después de aplicar los filtros) y crea un bonito, estático, el archivo puede almacenar en caché para la producción.
A menos que el proyecto le indique específicamente lo contrario, siempre debe ejecutar assets:instally assetic:dump, porque nunca sabrá cuáles de sus paquetes de terceros utilizan estos comandos. Solo necesita ejecutar assetic:dumpantes de implementar o ver la aplicación en prodmodo. El orden es irrelevante.
En cuanto a qué sistema debe usar su paquete, si ha leído lo anterior y no está seguro de lo que asseticpuede hacer por usted, use assets. Estarás bien.
<script type="text/javascript" src="app_dev.php/js/as5s31l.js"></script>que realmente querías decir<script type="text/javascript" src="app.php/js/as5s31l.js"></script>