Flag of Ukraine
SymfonyCasts stands united with the people of Ukraine

Instalación de código de terceros en nuestro JS/CSS

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.

Ahora tenemos un nuevo y bonito sistema de JavaScript y CSS que vive completamente dentro del directorioassets/. Vamos a trasladar nuestros estilos públicos a éste. Abrepublic/styles/app.css, copia todo esto, borra todo el directorio... y pégalo en el nuevo app.css. Gracias a encore_entry_link_tags() enbase.html.twig, el nuevo CSS se está incluyendo... y ya no necesitamos la antigua etiquetalink.

Ve a comprobarlo. Refresca y... ¡todavía se ve muy bien!

Instalación de bibliotecas JavaScript/CSS de terceros

Vuelve a base.html.twig. ¿Qué pasa con estas etiquetas de enlace externo para bootstrap y FontAwesome? Bueno, puedes mantener totalmente estos enlaces CDN. Pero también podemos procesar estas cosas a través de Encore. ¿Cómo? Instalando Bootstrap y FontAwesome como bibliotecas de proveedor e importándolas.

Elimina todas estas etiquetas de enlace... y luego actualiza. ¡Vaya! Vuelve a parecer que he diseñado este sitio. Vamos... primero a volver a añadir bootstrap. Busca tu terminal. Ya que el comando watch se está ejecutando, abre una nueva pestaña de terminal y ejecútalo:

yarn add bootstrap --dev

Esto hace tres cosas. Primero, añade bootstrap a nuestro archivo package.json. Segundo, descarga bootstrap en nuestro directorio node_modules/... lo encontrarías aquí abajo. Y tercero, actualiza el archivo yarn.lock con la versión exacta de bootstrap que acaba de descargar.

Si nos detuviéramos ahora... ¡esto no supondría ninguna diferencia! Hemos descargado bootstrap -yay- pero no lo estamos utilizando.

Para usarlo, tenemos que importarlo. Entra en app.css. Al igual que en los archivos JavaScript, podemos importar desde dentro de los archivos CSS diciendo @import y luego el archivo. Podemos hacer referencia a un archivo en el mismo directorio con ./other-file.css. O, si quieres importar algo del directorio node_modules/ en CSS, hay un truco: un ~ y luego el nombre del paquete: bootstrap.

@import '~bootstrap';
... lines 2 - 34

Eso es todo En cuanto hicimos eso, la función de vigilancia de Encore reconstruyó nuestro archivo app.css... ¡que ahora incluye Bootstrap! Observa: actualiza la página y... ¡volvemos a estar de vuelta! ¡Qué bien!

Las otras dos cosas que nos faltan son FontAwesome y una fuente específica. Para añadirlas, vuelve al terminal y ejecútalas:

yarn add @fontsource/roboto-condensed --dev

Revelación completa: hice algunas búsquedas antes de grabar para saber los nombres de todos los paquetes que necesitamos. Puedes buscar los paquetes en https://npmjs.com.

Añadamos también el último que necesitamos:

yarn add @fortawesome/fontawesome-free --dev

De nuevo, esto descargó las dos bibliotecas en nuestro proyecto... pero no las utiliza automáticamente todavía. Como esas bibliotecas contienen archivos CSS, vuelve a nuestro archivoapp.css e impórtalos: @import '~' y luego @fortawesome/fontawesome-free. Y @import '~@fontsource/roboto-condensed'.

@import '~bootstrap';
@import '~@fortawesome/fontawesome-free';
@import '~@fontsource/roboto-condensed';
... lines 5 - 34

El primer paquete debería arreglar este icono... y el segundo debería hacer que la fuente cambie en toda la página. Observa el tipo de letra cuando refrescamos... ¡ha cambiado! Pero... los iconos siguen estando algo rotos.

Importar archivos específicos de node_modules/

Para ser totalmente honesto, no estoy seguro de por qué esto no funciona fuera de la caja. Pero la solución es bastante interesante. Mantén pulsado command en un Mac -o ctrl en caso contrario- y haz clic en esta cadena fontawesome-free.

Cuando usas esta sintaxis, va a tu directorio node_modules/, a@fortawesome/fontawesome-free... y entonces, si no pones ningún nombre de archivo después de esto, hay un mecanismo en el que esta biblioteca le dice a Webpack qué archivo CSS debe importar. Por defecto, importa este archivo fontawesome.css. Por alguna razón... eso no funciona. Lo que queremos es este all.css.

Y podemos importarlo añadiendo la ruta: /css/all.css. No necesitamos el archivo minificado porque Encore se encarga de minificar por nosotros.

@import '~bootstrap';
@import '~@fortawesome/fontawesome-free/css/all.css';
@import '~@fontsource/roboto-condensed';
... lines 5 - 34

Y ahora... ¡estamos de vuelta!

La principal razón por la que me encanta Webpack Encore y este sistema es que nos permite utilizar importaciones adecuadas. Incluso podemos organizar nuestro JavaScript en pequeños archivos -poniendo clases o funciones en cada uno- y luego importarlos cuando los necesitemos. Ya no son necesarias las variables globales.

Webpack también nos permite utilizar cosas más serias como React o Vue: incluso puedes ver, en webpack.config.js, los métodos para activarlos.

Pero, por lo general, me gusta utilizar una encantadora biblioteca de JavaScript llamada Stimulus. Y quiero hablarte de ella a continuación.

Leave a comment!

What PHP libraries does this tutorial use?

// composer.json
{
    "require": {
        "php": ">=8.0.2",
        "ext-ctype": "*",
        "ext-iconv": "*",
        "symfony/asset": "6.0.*", // v6.0.3
        "symfony/console": "6.0.*", // v6.0.3
        "symfony/dotenv": "6.0.*", // v6.0.3
        "symfony/flex": "^2", // v2.1.5
        "symfony/framework-bundle": "6.0.*", // v6.0.4
        "symfony/monolog-bundle": "^3.0", // v3.7.1
        "symfony/runtime": "6.0.*", // v6.0.3
        "symfony/twig-bundle": "6.0.*", // v6.0.3
        "symfony/ux-turbo": "^2.0", // v2.0.1
        "symfony/webpack-encore-bundle": "^1.13", // v1.13.2
        "symfony/yaml": "6.0.*", // v6.0.3
        "twig/extra-bundle": "^2.12|^3.0", // v3.3.8
        "twig/twig": "^2.12|^3.0" // v3.3.8
    },
    "require-dev": {
        "symfony/debug-bundle": "6.0.*", // v6.0.3
        "symfony/stopwatch": "6.0.*", // v6.0.3
        "symfony/web-profiler-bundle": "6.0.*" // v6.0.3
    }
}