C'est quoi Symfony?
Symfony est un framework web open source écrit en PHP, utilisé pour développer des applications web. Il offre une structure modulaire, des composants réutilisables et suit le paradigme du modèle-vue-contrôleur (MVC) pour organiser le code. Symfony propose des fonctionnalités telles que la gestion des routes, la gestion des requêtes et des réponses HTTP, la gestion des formulaires, la sécurité, la validation des données, entre autres.
Les versions de Symfony
Tout d’abord, il faut savoir que la sortie des nouvelles versions de Symfony se base sur un calendrier précis. Des versions mineures sortent tous les six mois et la version majeure change tous les deux ans. Les versions mineures contiennent des corrections de bugs et de nouvelles fonctionnalités. Mais elles n’incluent aucun changement de rupture. Vous pouvez donc mettre à niveau vos applications très simplement entre versions mineures.
Le calendrier des versions de Symfony peut varier d'une année à l'autre, mais voici une idée générale du modèle de publication utilisé par Symfony :
Versions majeures : Elles introduisent souvent des fonctionnalités majeures, des améliorations significatives et peuvent nécessiter des changements importants dans le code des utilisateurs. Par exemple, la transition de Symfony 4 à Symfony 5 était une mise à niveau majeure.
Versions mineures : Elles apportent des fonctionnalités supplémentaires, des corrections de bugs et des améliorations sans introduire de changements majeurs dans l'architecture
Pourquoi la mise à jour ( upgrade )?
Un projet web est un projet vivant. C’est une évidence pour certains, mais on trouve énormément de projets sans aucun suivi, sur lesquels intervenir sans tout refaire est compliqué, long et coûteux. Une fois la phase de réalisation terminée, la mise en production ne signe pas la fin du projet. C’est juste une étape dans la vie du logiciel. Commence alors une phase de maintenance. C’est une étape cruciale, qui se doit d’être proactive pour identifier :
- Les risques (bugs, fin de maintenance, failles de sécurité…)
- Les opportunités (nouvelles fonctionnalités, amélioration des performances…)
On peut ainsi se prémunir des risques les plus évidents, préparer les développements à venir, planifier les mises à jour dans une période plus creuse et maintenir son projet à jour tout en maîtrisant son budget.
J’ai un projet à maintenir
Nous rencontrons encore aujourd’hui trop de projets qui ne sont pas mis à jour, parfois depuis plus de 10 ans ! Fatalement, un jour, un nouveau besoin, ou des problèmes de performance impliquent des développements longs et fastidieux, qui auraient pû être simplifiés avec un projet maintenu.
Comment se passe une migration ?
Ces ajustements sont apportés dans le fichier composer.json. À chaque occurrence d'une bibliothèque Symfony, identifiée par le format "symfony/..." avec une version actuelle comme "5.4.", nous la remplaçons par la nouvelle version "6.0.".
1- Mise à jour vers la nouvelle version via Composer
Ces ajustements sont apportés dans le fichier composer.json. À chaque occurrence d'une bibliothèque Symfony, identifiée par le format "symfony/..." avec une version actuelle comme "5.4.", nous la remplaçons par la nouvelle version "6.0.".
Au bas de votre fichier composer.json, dans le bloc supplémentaire, vous pouvez trouver un paramètre de données pour la version Symfony. Assurez-vous également de mettre à niveau celui-ci. Par exemple, mettez-le à jour vers 6.0.* pour passer à Symfony 6.0 :
Ensuite lancer la commande suivante pour télécharger la nouvelle version des librairies composer update “symfony/*”
composer update “symfony/*”
Erreurs de dépendance
Si vous obtenez une erreur de dépendance, cela peut signifier que vous devez également mettre à niveau d'autres librairies qui sont des dépendances des librairies Symfony. Pour permettre cela, transmettez l'indicateur --with-all-dependencies :
composer update “symfony/*” –with-all-dependencies
Si cela ne fonctionne toujours pas, votre fichier composer.json peut spécifier une version d'une librairie qui n'est pas compatible avec la version la plus récente de Symfony. Dans ce cas, la mise à jour de cette bibliothèque vers une version plus récente dans composer.json peut résoudre le problème.
NB : En lançant cette commande, vous localiserez directement où se situe le conflit. Dans la console, vous pourrez déterminer quelle bibliothèque pose problème en raison d'une incompatibilité, ainsi que la version précise nécessaire pour résoudre ce conflit.
2- Mise à niveau d'autres packages
Vous souhaiterez peut-être également mettre à niveau le reste de vos bibliothèques.Vous pouvez le faire en toute sécurité en exécutant :
Composer update
Chaque version a son importance dans la maintenance de vos projets Symfony. Les migrations permettent de supprimer les dépréciations et d’implémenter les nouveautés. Tout cela vous offre un maintien de votre projet à jour sur le long terme . En évitant les migrations, vous risquez de manquer les nouvelles fonctionnalités et améliorations de performances, privant ainsi votre projet d'une évolution continue.
Espérance vs Réalité
Vous allez dire alors : “En ajustant simplement le fichier composer.json et en lançant la commande adéquate, la transition vers une nouvelle version se fera sans difficulté.”
Mais en réalité la migration peut prendre soit quelques heures soit des semaines , Pas une tâche facile et dépend principalement de l’application
Par exemple, pour un code base assez clean, mais avec presque aucun test, on a mit environ 2 semaines pour monter à Symfony 6.3 et php 8.1
Il est donc essentiel de souligner que la refonte régulière et les tests fréquents représentent des économies de temps à long terme. Effectuer des migrations graduelles se traduit par des économies financières sur la durée.
Que faire aprés la mise à jour via composer ?
- Lire la documentation : Une fois la migration réussie, il est crucial de consulter la documentation de la nouvelle version. Cette étape permet d'identifier les fonctionnalités et les bibliothèques supprimées, et de les remplacer par leurs alternatives, en particulier lorsqu'il s'agit d'une migration vers une version majeure.
- Effectuer des tests approfondis : On arrive à la fin de la migration, mais attention, l’étape des tests est essentielle. Elle permet de s’assurer que toutes les fonctionnalités de l’application sont opérationnelles. On parle ici de tests unitaires, fonctionnels et d’intégration, afin de détecter d’éventuelles erreurs.
- Surveiller les performances : Cette étape concerne l’équipe d’exploitation, ils sont chargés de vérifier comment l’application se comporte en production. Les mises à jour effectuées peuvent avoir un impact sur les performances.
Bien que les applications diffèrent, la migration vers une nouvelle version majeure de Symfony ne se fait pas sans mal.
Dans notre cas, la plupart des fonctionnalités de Symfony demeurent inchangées, limitant ainsi les modifications nécessaires dans notre code. Pour celles qui changent , l'équipe de Symfony fait un excellent travail avec les logs de dépréciations. Ce système nous facilite énormément la montée de version.
Cependant, l'attente que toutes les dépendances, en particulier les bundles, publient une version compatible avec la nouvelle version reste contraignante. Pour accélérer ce processus, il est possible de soumettre vous-même un pull-request (PR) pour rendre tel ou tel Bundle compatible : ils sont nombreux à attendre votre contribution, n'hésitez plus, et vous pouvez désormais vous appuyer sur notre expérience pour mieux appréhender ce que signifie réellement une migration de Symfony !
Happy Coding !
Par Zahira SAADI