Actualizando aplicaciones web de Symfony 3 al 4

Una tarea que tarde o temprano llega es el actualizar a la última versión de Symfony. Si queremos estar al día de todas las nuevas mejoras, que la aplicación funcione lo mejor posible, con todos los parches, lo más rápido posible.. llegaremos a esta tarea.

Actualizar de la 1 a la 2 no lo he vivido, pero tengo entendido que no servía casi nada de la estructura de códigos montada. De la versión 2 a la 3 sí que lo he vivido; habían muchas funcionalidades obsoletas, había que actualizar paulatinamente hasta la versión 2.7 o la 2.8, si mal no recuerdo, para finalmente saltar a la 3 sin que todo petara. Ahora en el salto de la versión 3 a la 4 todo es bastante fácil, o por lo menos así lo he visto.

Una vez se comprende el funcionamiento de Symfony Flex, podemos mover de directorio los códigos fuentes de los bundles que tengamos, las plantillas y configuraciones. Cierto es que hay algunas funcionalidades como la autenticación de usuarios que me ha dado bastante guerra. Pero en cosa de 1 día puedes tener un proyecto mediano-pequeño bien migrado de la versión 3 a la 4.

Empezando, cargar el esqueleto de la nueva aplicación

Simplemente cargando desde línea de comandos el symfony/skeleton tendrás el punto de partida:

composer create-project symfony/skeleton proyecto-de-prueba

Esperamos, y si todo ha ido bien, ya tenemos lo necesario para ponerle los componentes, y luego copiar archivos a los nuevos directorios.

Cargando los principales componentes

La principal diferencia al usar Symfony Flex, que es el sistema que viene en Symfony 4 para instalar los componentes, es que tienes que instalar componente a componente. Esto hace que ya no tienes alrededor de 70 componentes instalados como punto de partida, sino que sólo vas instalando los que realmente usas. Todo será mucho más ligero y harás mucho más rápida tu aplicación web.

Los principales componentes que he estado usando en los últimos proyectos, por si te coinciden o como puno de partida, se instalan desde línea de comandos así:

composer require --dev maker server profiler
composer require twig asset annotations doctrine security symfony/monolog-bundle friendsofsymfony/user-bundle knplabs/knp-paginator-bundle lexik/maintenance-bundle vich/uploader-bundle friendsofsymfony/ckeditor-bundle jmose/command-scheduler-bundle liip/imagine-bundle

Los principales diferencias entre directorios

/app/cache -> /var/cache
/app/config -> /config
/app/logs -> /var/log
/app/Resources/views -> /templates
/app/Resources/translations -> /translations
/src/AppBundle.. toda la app va a /src sin estructura de bundles
/web -> /public

En líneas generales estos son los cambios. La nueva estructura del directorio principal /src es donde estará el groso de tu aplicación web. Ahora ya no dividimos en bundles la aplicación completa, sino que toda la aplicación va junta. Esto tiene más sentido porque normalmente programaremos para construir algo concreto, no para hacer bundles y redistribuirlos en Internet.

El proceso de actualización

Lo siguiente simplemente consiste en copiar absolutamente todos los ficheros del proyecto en Symfony 3 al directorio correspondiente del proyecto en Symfony 4.

Tendrás que fundir todos tus bundles en uno. Nada te funcionará, tendrás que renombrar las clases y espacios de nombres. Pero la mayor parte del código no tendrás que tocarlo. Sólo tendrás que revisar todos los errores con paciencia hasta conseguir que todas las piezas encajen.

Ahora ya no tenemos varios bundles para estructurar nuestra web.

Las pricipales direferencias a modificar que me he encontrado, están en las nuevas mejoras en la inyección de dependencias, y la simplificación del groso de la aplicación. Es decir, ahora todo lo de tu aplicación web va dentro del directorio /src y la forma de inyectar servicios ha cambiado.

Finalmente, tendrás una serie de códigos obsoletos o funcionamientos internos de los componentes de Symfony que si no los habías actualizado en Symfony 3, puede que en Symfony 4 ya no existan. Esto me ha pasado en el componente de seguridad, en cómo autenticar a los usuarios, que ha cambiado mucho. Yo venía utilizando un código obsoleto en Symfony 3 y me ha dado guerra.

Terminando

Esto es todo lo que he visto en común en varios pequeños proyectos que he migrado. Espero que sirva de ayuda para perderle el miedo a la migración, ya que no es tan complicado como puede parecer a priori. ¡Un saludo!

Compartir..

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

3 × cuatro =