Flag of Ukraine
SymfonyCasts stands united with the people of Ukraine

Instalación de AssetMapper

Video not working?

It looks like your browser may not support the H264 codec. If you're using Linux, try a different browser or try installing the gstreamer0.10-ffmpeg gstreamer0.10-plugins-good packages.

Thanks! This saves us from needing to use Flash or encode videos in multiple formats. And that let's us get back to making more videos :). But as always, please feel free to message us.

Ya sabemos que podemos ejecutar JavaScript moderno directamente en nuestro navegador. Pero para facilitar el proceso, vamos a instalar un nuevo componente de Symfony llamado AssetMapper.

Busca tu terminal y ejecuta:

composer require symfony/asset-mapper symfony/asset

Incluyo el segundo paquete porque nos proporciona esa bonita función asset() en Twig. Ya está instalado en este proyecto - asegúrate de que lo tienes en el tuyo.

Antes de empezar: AssetMapper es experimental en Symfony 6.3, por lo que es probable que haya algunas interrupciones de retrocompatibilidad antes de la 6.4. Pero como veremos, los conceptos son sólidos, y puedes desplegar un sitio super-performante con AssetMapper hoy mismo.

Cambios de la receta Flex

Ejecuta:

git status

Oooh: la receta Flex para AssetMapper ha añadido varias cosas. En primer lugar, nos ha proporcionado un directorio assets/... que es prácticamente idéntico al que tendrías si instalaras WebpackEncore. Tenemos un archivo app.js -este será el principal, el que se ejecute- y también app.css: el archivo CSS principal.

8 lines assets/app.js
/*
* Welcome to your app's main JavaScript file!
*
* This file will be included onto the page via the importmap() Twig function,
* which should already be in your base.html.twig.
*/
console.log('This log comes from assets/app.js - welcome to AssetMapper! 🎉')

body {
background-color: skyblue;
}

En templates/base.html.twig, la receta también añadió una etiqueta link para apuntar aapp.css. Hablaremos más sobre hojas de estilo más adelante, pero ya puedes ver que la configuración CSS es perfectamente sencilla.

... lines 1 - 2
<head>
... lines 4 - 11
{% block stylesheets %}
<link rel="stylesheet" href="{{ asset('styles/app.css') }}">
{% endblock %}
... line 15
{% block javascripts %}
{{ importmap() }}
... line 18
{% endblock %}
</head>
... lines 21 - 70

La receta añadió otra línea importante a este archivo: {{ importmap() }}. Que se asocia con un nuevo archivo importmap.php. Estos son importantes, y entraremos en detalle sobre ellos en breve.

Las conclusiones son que la receta creó unos cuantos archivos en assets/ y añadió una etiquetalink a base.html.twig. Pero por lo demás, aún no ha pasado gran cosa.

AssetMapper "Rutas"

Volviendo al terminal, la receta también ha creado un nuevo archivo asset_mapper.yaml. Abrámoslo: config/packages/asset_mapper.yaml.

framework:
asset_mapper:
# The paths to make available to the asset mapper.
paths:
- assets/

AssetMapper tiene un concepto principal: lo apuntas a un directorio o conjunto de directorios, como assets/, y hace que todos los archivos de su interior estén disponibles públicamente, como si vivieran en el directorio public/. Veremos cómo se consigue en un minuto.

Pero antes de hacer nada, actualiza la página y... ¡el fondo se ha vuelto azul! Eso viene del archivo app.css. Y, en el registro de la consola, vemos un mensaje que procede de assets/app.js. Así que, de algún modo, mágicamente, sólo con ejecutar un comandocomposer require, estos dos archivos ya están expuestos públicamente y se están cargando en la página. A continuación, vamos a ver cómo funciona todo esto.

Leave a comment!

0
Login or Register to join the conversation
Cat in space

"Houston: no signs of life"
Start the conversation!

What PHP libraries does this tutorial use?

// composer.json
{
    "require": {
        "php": ">=8.1",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "babdev/pagerfanta-bundle": "^4.0", // v4.2.0
        "doctrine/doctrine-bundle": "^2.7", // 2.10.0
        "doctrine/doctrine-migrations-bundle": "^3.2", // 3.2.4
        "doctrine/orm": "^2.12", // 2.15.2
        "knplabs/knp-time-bundle": "^1.18", // v1.20.0
        "pagerfanta/doctrine-orm-adapter": "^4.0", // v4.1.0
        "pagerfanta/twig": "^4.0", // v4.1.0
        "stof/doctrine-extensions-bundle": "^1.7", // v1.7.1
        "symfony/asset": "6.3.*", // v6.3.0
        "symfony/asset-mapper": "6.3.*", // v6.3.0
        "symfony/console": "6.3.*", // v6.3.0
        "symfony/dotenv": "6.3.*", // v6.3.0
        "symfony/flex": "^2", // v2.3.1
        "symfony/framework-bundle": "6.3.*", // v6.3.0
        "symfony/http-client": "6.3.*", // v6.3.0
        "symfony/monolog-bundle": "^3.0", // v3.8.0
        "symfony/proxy-manager-bridge": "6.3.*", // v6.3.0
        "symfony/runtime": "6.3.*", // v6.3.0
        "symfony/stimulus-bundle": "^2.9", // v2.9.1
        "symfony/twig-bundle": "6.3.*", // v6.3.0
        "symfony/ux-turbo": "^2.9", // v2.9.1
        "symfony/web-link": "6.3.*", // v6.3.0
        "symfony/yaml": "6.3.*", // v6.3.0
        "twig/extra-bundle": "^2.12|^3.0", // v3.6.1
        "twig/twig": "^2.12|^3.0" // v3.6.1
    },
    "require-dev": {
        "doctrine/doctrine-fixtures-bundle": "^3.4", // 3.4.4
        "symfony/debug-bundle": "6.3.*", // v6.3.0
        "symfony/maker-bundle": "^1.41", // v1.49.0
        "symfony/stopwatch": "6.3.*", // v6.3.0
        "symfony/web-profiler-bundle": "6.3.*", // v6.3.0
        "zenstruck/foundry": "^1.21" // v1.33.0
    }
}
userVoice