Actualización a Symfony 7
Keep on Learning!
If you liked what you've learned so far, dive in! Subscribe to get access to this tutorial plus video, code and script downloads.
With a Subscription, click any sentence in the script to jump to that part of the video!
Login SubscribeTodas 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.json
sustituye 6.4.*
por 7.0.*
.
{ | |
// ... 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.
{ | |
// ... 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 session
ya 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.