La nouvelle version Symfony 7.0 est arrivée !

La version 7 de Symfony est enfin sortie et nous amène son lot de changements


Le plus remarquable est au niveau du typage. La Core Team nous a gâté en « typant » au maximum le cœur de Symfony, ce qui permet à tous les développeurs d’avoir un code de qualité simplifié par l’auto-complétion de nos IDE préférés.
Restreint à la version 8.2 de PHP au minimum, il devient donc nécessaire de faire évoluer notre code en supprimant les reliquats du passé !

Passons aux attributs !
Si ce n’est pas déjà fait, il faut définitivement abandonner les annotations pour les remplacer par les attributs.
Simplification du code grâce aux attributs dans doctrine (#[AsDoctrineListener(event: Events::postFlush)]), en injection de dépendances (#[AsMessageHandler]) et d’autre…
Le bundle (https://symfony.com/bundles/SensioFrameworkExtraBundle/current/index.html) permettant cette cohabitation est, d’ailleurs (en toute logique) déprécié.

Un nouvel header interprété directement par Symfony permet un gain de performances non négligeable : les early hints.
Présenté depuis plusieurs années par Kevin Dunglas à travers son Framework FrankenPHP, Symfony le propose enfin :
il prend désormais en compte un header pour charger dès réception de la requête les dépendances (css, js et autre).
Dans le « controller », la fonction SendEarlyHint() permet d’indiquer les ressources en dépendance.
Attention cependant cela n’ est compatible qu’avec HTTP/2 !

Un gros point noir de Symfony a été revu : la gestion des assets.
Jusque là embarqué grâce au bundle Webpack encore, très lourde, complexe et peu performante, la gestion des JS et CSS était une vrai galère : version NodeJS obsolète, connaissances du mastodonte Webpack requises, les performances ne sont vraiment pas au rendez-vous..

Symfony nous propose donc avec sa nouvelle version un nouveau bundle : AssetMapper (https://symfony.com/doc/current/frontend/asset_mapper.html).
Plus besoin de compilateurJS comme Webpack, les appels se font simplement depuis les Templates à travers une fonction simple importmap().
La librairie ne permet pas tous ce que proposait Webpack pour optimiser les fichiers (en les minifiant par exemple) mais est-ce son rôle ? Il permet tout de même d’utiliser typescript et SasS, la base pour avoir un code propre.

Si vous avez besoin  de plus, il existe aujourd’hui des Frameworks JS qui permettent simplement de gérer une structure JS complexe indépendamment de Symfony : au hasard : Svelte (n’hésitez pas à aller regarder la vidéo de notre architecte Mathieu à ce sujet sur notre chaine Youtube).

Tous ces changements nous promettent donc un gain de performances et une simplicité de développement.
C’est tout ce qu’on demande à un Framework !

Nous avons hâte d’utiliser cette version  pour nos prochains projets !

Article rédigé par Guillaume Méot.