Buy Access to Course
06.

Actualización a Symfony 7

|

Share this awesome video!

|

Keep on Learning!

With a Subscription, click any sentence in the script to jump to that part of the video!

Login Subscribe

Todas las depreciaciones relevantes han desaparecido. ¡Así que estamos listos para Symfony 7.0!

Actualizando composer.json

Hacer la actualización en sí es... casi decepcionantemente fácil. En composer.jsonsustituye 6.4.* por 7.0.*.

97 lines | composer.json
{
// ... lines 2 - 4
"require": {
// ... lines 6 - 16
"symfony/asset": "7.0.*",
"symfony/console": "7.0.*",
"symfony/dotenv": "7.0.*",
// ... line 20
"symfony/framework-bundle": "7.0.*",
"symfony/http-client": "7.0.*",
// ... line 23
"symfony/proxy-manager-bridge": "7.0.*",
"symfony/runtime": "7.0.*",
"symfony/twig-bundle": "7.0.*",
// ... lines 27 - 28
"symfony/yaml": "7.0.*",
// ... lines 30 - 31
},
// ... lines 33 - 80
"extra": {
"symfony": {
// ... line 83
"require": "7.0.*",
// ... line 85
}
},
"require-dev": {
// ... line 89
"symfony/debug-bundle": "7.0.*",
// ... line 91
"symfony/stopwatch": "7.0.*",
"symfony/web-profiler-bundle": "7.0.*",
// ... line 94
}
}

Eso es todo. Gira y ejecuta:

composer up

Encontrar paquetes bloqueantes

Preparaos porque puede que esto no funcione. ¡Sí! Algo está bloqueando la actualización! Lo primero que veo es babdev/pagerfanta-bundle. Aparentemente, funciona con Symfony 4, 5 y 6, pero no con 7.

Es muy probable que tenga que actualizarlo a una nueva versión que sí sea compatible con Symfony 7. Ejecuta:

composer outdated

Efectivamente: hay tres paquetes pagerfanta que tienen todos una nueva versión mayor. En composer.json, busca pagerfanta. Cámbialos todos a ^4.0 para obtener esa nueva versión mayor.

97 lines | composer.json
{
// ... lines 2 - 4
"require": {
// ... lines 6 - 8
"babdev/pagerfanta-bundle": "^4.0",
// ... lines 10 - 13
"pagerfanta/doctrine-orm-adapter": "^4.0",
"pagerfanta/twig": "^4.0",
// ... lines 16 - 31
},
// ... lines 33 - 95
}

Y como se trata de una actualización de versión mayor, no lo haré yo, pero deberías comprobar el repositorio de cada paquete y encontrar el registro de cambios o las notas de la versión que hablen de cualquier ruptura de retrocompatibilidad entre la versión 3 y la 4.

Vale, vuelve a intentar la actualización:

composer up

Y... ¡sigue sin funcionar! Hmm: dice que la raíz composer.json -es decir, nuestrocomposer.json - requiere symfony/proxy-manager-bridge 7.0.* pero no ha encontrado una versión 7.

Efectivamente, este paquete está directamente en nuestro archivo composer.json. Los proxies son algo que Doctrine utiliza entre bastidores para cargar las relaciones perezosas. Recientemente, Symfony ha añadido su propia versión de proxies llamados "objetos fantasma". Son espeluznantes. De todos modos, este paquete proxy ya no es necesario. Se añadió originalmente a nuestra aplicación cuando instalamos Doctrine: formaba parte deorm-pack.

Deshazte de él Después vuelve a probar composer up:

composer up

Esta vez... ¡funciona! ¡Mira todas esas bonitas actualizaciones de Symfony 7! Y lo mejor de todo, cuando vamos al sitio, ¡también funciona! ¡Claro que funciona! Nos hemos encargado de las deprecaciones, para que no haya sorpresas cuando por fin lleguemos a 7.0.

Otros paquetes que actualizar

Llegados a este punto, me gusta comprobar qué otros paquetes no relacionados con Symfony están desactualizados. Ejecuta de nuevo composer outdated:

composer outdated

¡Woh! Sólo dos! doctrine/lexer y un php-parser. Para averiguar por qué no ha pasado a la versión 3, copia el nombre de ese paquete y ejecuta

composer why-not doctrine/lexer 3.0

Hmm: nuestra versión de doctrine/orm requiere doctrine/lexer versión 2. Y como no vimos doctrine/orm como paquete obsoleto, significa que simplemente no existe todavía una versión de doctrine/orm que funcione con doctrine/lexer 3. Es un paquete de bajo nivel y no tenemos prisa.

El otro paquete - php-parser - puedo decirte, sin siquiera mirar, que lo necesita symfony/maker-bundle. En su próxima versión, se permitirá la versión 5.

Recetas para nuevas versiones

Como acabamos de actualizar algunos paquetes, Ejecuta:

composer recipes

¡Hay dos nuevas actualizaciones de recetas disponibles! Para actualizar, primero confirma nuestros cambios... con un emoji para celebrarlo... y luego ejecuta:

composer recipes:update

Y git diff --cached para ver los cambios. Esto es genial: han desaparecido un montón de líneas. Se han eliminado porque ahora son los valores por defecto. La clave sessionya no necesita estas cosas: son los valores por defecto... y lo mismo paraphp_errors y handle_all_throwables. Es sólo una bonita limpieza de la configuración.

Confírmalo y ejecuta recipes:update una vez más:

composer recipes:update

Comprueba los cambios. Lo mismo: elimina una opción de configuración que ahora es la predeterminada. Confírmalo. Nuestro proyecto está ahora un poco más limpio.

Así que estamos en Symfony 7, ¡nuestra aplicación funciona y nuestras recetas están actualizadas!

¡Cambiando el espacio de nombres de #[Route]!

Mientras estamos aquí, dentro de un controlador, resalta el atributo Route:

El espacio de nombres de anotación de Symfony quedará obsoleto en Symfony 6.4 /7.0.

Mira la declaración use: ¡tiene Annotation en el espacio de nombres! Esta clase aún no está obsoleta, pero lo estará pronto. Y arreglarlo es sencillo. Elimina la sentencia use, baja aquí, haz clic en la clase, pulsa Alt+Enter, Importar clase, y luego coge la del espacio de nombres Attribute.

Cópiala... y repite la operación en los otros dos archivos del controlador. Esto nos ahorrará una depreciación en el futuro.

Ahora que estamos en Symfony 7, quiero hacer algo opcional, pero realmente genial: quiero eliminar Webpack Encore y sustituirlo por AssetMapper.