Actualizar symfony 3.x a 4.x

pexels-oleg-magni-2058128.jpg
Solucionex
09
Sep 21

La actualización Symfony de la versión 3.x a alguna de las posteriores no es inmediata puesto que hay varios cambios importantes en Symfony, principalmente son: la estructura de carpetas y que ahora la aplicación no se estructura en bundles.
 
Liberamos nuestro código de Deprecateds (Las notificaciones de código deprecated aparecen en el debugger de symfony)
 
Actualizamos el composer.json el paquete de Symfony y las librerías que podrían haber quedado desactualizadas, revisamos en packagist.org la compatibilidad de las librerías que estamos usando con las versiones de Symfony. Después de ello ejecutamos composer update.
 
Después sería conveniente aunque opcional instalar flex para automatizar muchas acciones comunes de Symfony.
 
Instalamos flex composer require symfony/flex Eliminamos la dependencia de Symfony
composer remove symfony/symfony Y añadimos el paquete de Symfony a la lista de conflictos del composer.json "conflict":
{
    "symfony/symfony": "*"
}
Añadimos todas las dependencias que tu proyecto requiere composer require annotations asset orm-pack twig logger mailer form security translation validator composer require --dev dotenv maker-bundle orm-fixtures profiler Reinstalamos los paquetes de composer desde 0 rm -fr vendor/*
composer install
En este punto se han movido los ficheros de configuración de app/config a config, aunque hay que generar el fichero config/services.yaml copiamos el fichero por defecto de nuestra versión de Symfony y añadimos nuestras configuraciones
 
Movemos los contenidos de:
 
app/Resources/views/ a templates/
app/Resources/translations/ a translations/
app/Resources/<BundleName>/views/ a templates/bundles/<BundleName>/
rest of app/Resources/ files a src/Resources/
 
Eliminamos el directorio app
 
Movemos el codigo de src/AppBundle a src (Excepto ficheros específicos del bundle como AppBundle.php y DpendencyInjection)
Eliminamos src/AppBundle
Actualizamos los valores de autoload y autoload-dev del comoposer.json a App\
 
Movemos los assets de src/AppBundle/Resources/public/ a public/
Movemos las fuentes de los assets a assets y usamos Webpack Encore para gestionarlos y compilarlos
 
Creamos un nuevo public/index.php (lo sacamos del original de Symfony)
 
Eliminamos la carpeta web
 
Actualizamos el script de bin/console
 
Eliminamos bin/symfony_requirements
 
 
Fuentes
Actualizar Symfony https://symfony.com/doc/4.0/setup/upgrade_major.html
Actualizar a flex https://symfony.com/doc/4.0/setup/flex.html#upgrade-to-flex