Migrer ses applications Symfony 4 en Symfony 5

#framework#migration#php#symfony

Les développeurs d’aujourd’hui utilisent de plus en plus de frameworks car ceux-ci offrent, entre autres, une meilleure structuration de code pour le développement des applications. C’est ainsi qu’en 2017, le framework Symfony reposant sur le langage PHP, développé par Sensiolabs, atteignait le milliard de téléchargements. Deux ans plus tard, en novembre 2019, sort la 5ème version du framework et donc le même enthousiasme mêlé d’inquiétude pour tous les développeurs l’utilisant : quelles sont les nouveautés ? Dois-je franchir le pas pour cette version et si oui, comment migrer mon application réalisée dans une version antérieure ?

Symfony est un framework open-source écrit en PHP et basé sur une architecture MVC (Modèle-Vue-Contrôleur). Il se définit comme un ensemble de composants PHP modulables et adaptables qui, en facilitant le développement, permet un gain de temps considérable dans la création et surtout la maintenance d’une application Web.

Il est aussi possible d’y associer d’autres frameworks comme Bootstrap pour la partie design des pages ou encore des frameworks Javascript tels Angular ou React pour des traitements côté client.

Installation

Pour son fonctionnement, le framework Symfony a besoin d’un environnement constitué de :
• PHP pour l’interprétation du code PHP
• d’un serveur Apache ou Nginx qui fera office d’un serveur HTTP
• d’un serveur de base de données (MySql, SQLServer, PostgreSQL, Oracle…) pour la gestion des données

Symfony 4 – Grands Principes

Avec sa 4ème version, Symfony propose deux solutions logicielles :
• un squelette (skeleton) simple comprenant uniquement les packages de base
• un squelette pour site internet (website skeleton) qui intègre en plus de ceux de base, toute une catégorie de packages nécessaires à une application web classique
On favorisera la première solution, plus légère, pour la création d’un micro-service ou d’une API par exemple.

L’une des nouveautés phares à relever dans cette version 4 est le plugin Symfony Flex, automatisant les tâches les plus courantes comme l’action et la configuration de nouveaux packages. Bien que concrètement disponible depuis la version 3.3 de Symfony, ce plugin n’a été adopté massivement que depuis la version 4 qui l’intègre dans ses bonnes pratiques. Si l’on compare à la version majeure précédente, à savoir la version 3, nous étions obligés d’éditer le fichier AppKernel.php, le fichier config.yml et le fichier routing.yml pour la prise en compte de changements liés à l’ajout ou la suppression d’un package. Un seul fichier à mettre à jour au lieu de trois, on ne peut qu’apprécier !

Une autre spécificité de la version 4 de Symfony consiste à indiquer à son application d’utiliser le meilleur algorithme de hachage possible disponible sur le serveur. Pour ce faire, il faut tout d’abord modifier le fichier security.yaml.


Fig 1 : source : symfony.com. Choix automatique du meilleur algorithme

En positionnant la variable « algorithm » à « auto », l’application passe en algorithme automatique (voir Fig 1). Il suffit ensuite d’ajouter à votre repository UserRepository.php une nouvelle fonction comprenant la string à hacher (voir Fig 2).


Fig 2 : source : symfony.com. Hachage d’une chaîne de caractères

Cette fonction vérifiera à chaque connexion si un meilleur hachage est disponible, et si tel est le cas, il sera mis à jour. Mais assez parlé de Symfony 4, passons à Symfony 5 !

Symfony 5 – Grands Principes

Sur le fond, Symfony 5 présente les mêmes caractéristiques que la version 4. Sur la forme par-contre, cette version 5 apporte deux composants représentatifs de sa maturité :


Fig 3 : source : symfony.com. Transformation d’une chaîne de caractères

STRING : string est un composant orienté objet qui permet de travailler avec des chaînes de caractère en UTF-8. Il dispose de différentes fonctions comme le « replace » qui permet de remplacer un contenu dans une chaîne de caractères (voir Fig 3), d’autres fonctions qui permettent de transformer la chaîne de caractères (voir Fig 4) ou encore la fonction « endsWith » qui peut être utilisée dans le cas où on veut valider la terminaison d’une sous chaîne dans une chaîne (voir Fig 5).


Fig 4 : mise en caractères majuscules et ajout d’un tiret au début et à la fin


Fig 5 : source : symfony.com. Utilisation de endsWith

NOTIFIER : notifier est un composant permettant de gérer plus simplement l’envoi de notifications sur différents types de canaux , tels SMS, mail, Chat, etc. Par exemple, l’utilisateur peut être averti à chaque connexion si l’adresse IP utilisée est nouvelle (voir Fig 6).


Fig 6 : utilisation de notifier pour envoi d’un SMS

En plus de ces quelques ajouts, on y gagnerait aussi niveau performance. En effet, selon les équipes ayant implémenté Symfony 5, ce dernier comporterait 37 000 lignes de code de moins que la version majeure précédente, engendrant des performances accrues par rapport à la version 4 (temps de réponse moindre lors de l’exécution d’applications reposant sur Symfony).

La migration de Symfony 4 vers Symfony 5

Comme on a pu le constater, la version 5 de Symfony ne révolutionne pas la version 4. Pour cette raison, le portage d’une application implémentée en version 4 vers la version 5 se fait sans trop de douleur. Celle-ci peut en effet bien se passer si vous respectez ces différentes étapes :
1. Vérifiez que les configurations serveur sont compatibles avec la nouvelle version
2. Si vous êtes en version mineure inférieure à 4.3, passez par la version 4.4. Elle contient la plupart des fonctionnalités de la version 5 et vous remontera tous les warnings (via developer toolbar).
3. Vérifiez les compatibilités des packages utilisés et corrigez au préalable les évènements du framework qui ont changé de nom entre les deux versions.

Les nouveautés de Symfony 5.1

En plus des deux modules présentés précédemment, voici les principaux ajouts de la version 5.1 :
• Ajout du composant Uid appelé aussi Uuid, généralement utilisé pour sécuriser les urls à la place des ids (souvent déclarées en auto_increment).
• Ajout mineur d’un composant validateur permettant de tester les noms de domaine
• Notre coup de cœur : possibilité de priorisation des routes grâce au composant annotation. Plus la valeur de notre route est élevée, plus elle est prioritaire : ainsi la requête de la valeur la plus élevée est privilégiée.

Par exemple, si on se referre à la version 4, dans le cas où on a les deux routes suivantes « /users/export » et « /users/{username} », on était obligé de mettre la route « /users/export » au-dessus de « /users/{username} » pour prioriser la route « /users/export ». Alors qu’avec cette nouvelle version, le simple fait de rajouter l’attribut « priority » dans les annotations de la route priorise la route de l’export à celle qui retourne les informations concernant un utilisateur (voir Fig 7).


Fig 7 : utilisation de l’annotation « priority »

En conclusion

Ainsi, la version 5 de Symfony n’étant qu’une évolution naturelle de la version 4.4, il n’existe pas de différences notables comme chacun a pu le constater entre la version 3 et la version 4 (changements d’architecture, notions de Bundles etc.). Plus généralement, il semble désormais peu probable que chaque future version de Symfony remette considérablement en question la version majeure précédente, Symfony ayant désormais atteint un bon degré de maturité. Souhaitons que la version 6, attendue pour fin 2021, soit conforme à nos prévisions, facilitant ainsi le portage dans la nouvelle mouture de la solution tout en profitant des dernières fonctionnalités implémentées.
 
Il est possible de retrouver l’intégralité de cet article dans le numéro 246 du mois de Mai 2021 du magazine « Programmez ».