Sortie de Symfony 7 : les nouveautés de cette version
Publié le 30 novembre 2023
Après deux ans de développement, plus de 6000 commits et la contribution de 600 personnes, la version 7 de Symfony vient de sortir ! Symfony est un framework web open source écrit en PHP permettant le développement d'applications web robustes et évolutives. Utilisé par 15% du Web mondial, Symfony est compatible avec une multitude de solutions open source telles que API Platform, Sylius, Laravel ou encore PrestaShop. Les-Tilleuls.coop contribue au développement de Symfony depuis ses premiers pas : notre scop compte dans ses rangs un membre de la Core Team (l’équipe chargée de la gestion du framework), plusieurs contributeurs et contributrices, ainsi qu’une quinzaine de personnes certifiées. Cet article explore les principales fonctionnalités de cette nouvelle version que nous sponsorisons.
Fin du support des annotations Doctrine et du SensioFrameworkExtraBundle
Jusqu’à la sortie de PHP 8, le langage ne permettait pas nativement d’ajouter des métadonnées à une classe, une fonction ou une propriété, à la façon des annotations de Java ou des décorateurs de Python. Pour pallier cette limitation, la solution consistait à insérer des annotations via la PHPDoc, qui était alors lue par un parseur afin d’appliquer les modifications correspondantes. Cette solution, retenue notamment par Doctrine (qui en propose d’ailleurs une implémentation), avait l’avantage de permettre un développement presque aussi fluide que dans les langages concurrents, mais avait l’inconvénient d’être moins performante.
C’est pour répondre à une demande croissante que PHP 8 a ajouté le support natif de cette fonctionnalité, nommé attributs, rendant de fait les annotations obsolètes. La version 7.0 de Symfony en profite également pour supprimer le support d’un des plus anciens bundles : en des temps immémoriaux, Symfony ne proposait pas nativement certaines des annotations les plus courantes, telles que @Route
, @ParamConverter
ou encore @IsGranted
. Ces annotations ayant depuis été incluses dans le framework, le bundle est devenu inutile.
Les nouveaux composants
Écrire du JavaScript dans notre application Symfony nécessitait jusqu’alors de faire appel à un module bundler (comme Webpack) pour que notre code soit compris par les navigateurs. AssetMapper nous émancipe de tout système de compilation, ainsi que de l’utilisation d’un gestionnaire de paquets grâce au support désormais natif de importmap (et d’autres fonctionnalités modernes de JavaScript) par les navigateurs. Bref, de la simplicité et une meilleure DX !
Présenté à la Symfony Live Paris 2023 par Fabien Potencier, le composant Scheduler est une nouvelle solution, basée sur Messenger, permettant de générer les messages directement selon les fréquences assignées et enregistrées à l'instar d’un Cron. Notre coopératrice Allison Guilhem donnera un talk à ce sujet la semaine prochaine à la SymfonyCon à travers un cas concret d’utilisation.
Lorsque nous écrivons les tests de nos applications, nous devons souvent prendre en compte le fait que le temps est une propriété physique sur laquelle nous n’avons pas la main. Nous devons alors opter pour des solutions peu élégantes pour réaliser ces tests, qui parfois provoquent des erreurs momentanées.
C’est pour répondre à cette problématique que Symfony 2.8 avait introduit une solution pour faciliter ces tests. Près de sept ans plus tard, Symfony 7 redouble d’efforts et introduit le composant Clock, permettant d’avoir une couche d’abstraction entre les fonctions natives de date de PHP et notre application. Grâce à cette couche d’abstraction, nous pouvons désormais :
- dans notre application, effectuer nos tâches habituelles sur les dates, comme avant, grâce à la classe
NativeClock
; - dans nos tests, utiliser une classe nommée
MockClock
imitant une horloge fictive ; - dans les analyses de performance, utiliser la classe
MonotonicClock
qui s’appuie sur une horloge possédant une plus grande résolution fournie par PHP.
Introduits dans la spécification HTTP/2, 103 Early Hints est un code de statut permettant d’indiquer au navigateur, avant même l’envoi de la réponse, les ressources qu’il aura besoin de récupérer en plus de celles qu’il a demandées initialement (scripts, feuilles de style, images…). Cela lui permet donc de prendre un peu d’avance et lui évite de devoir attendre et lire le HTML retourné pour découvrir qu’il aura besoin desdites ressources pour afficher une page. Grâce aux travaux de notre coopérateur Kévin Dunglas, Symfony 7 prend désormais en charge nativement ce nouveau code de statut grâce à la méthode sendEarlyHint() fournie dans la classe abstraite AbstractController. Notez que ce code de statut nécessite un serveur PHP (SAPI) compatible. Le serveur d’applications web FrankenPHP est actuellement le seul à en proposer un support natif.
Les webhooks sont des callbacks HTTP définis par l'utilisateur. Ils permettent à d'autres services de vous avertir des événements externes sans que vous ayez besoin de venir les chercher vous-même. Allison Guilhem a donné une conférence expliquant comment implémenter une gestion de webhooks respectueuse des standards du Web ouvert à l’API Platform Con 2023. Si le sujet vous intéresse, le replay de son intervention est disponible ici :
La sécurité renforcée avec Access Token Authentication
Suite à la contribution de Florent Morselli au composant Security pour ajouter le support du AccessTokenAuthenticator, notre coopérateur Vincent y a ajouté le support d’OpenID Connect. Il a présenté cette contribution lors de l’API Platform Conférence 2023, le replay de ce talk sera publié la semaine prochaine ! Cette fonctionnalité, dorénavant intégrée dans Symfony, garantit une meilleure sécurité de vos APIs tout en respectant le standard OIDC.
Migrez dès à présent vos apps vers Symfony 7 !
Pour assurer une sécurité constante de vos applications et les protéger contre d'éventuelles failles, il est essentiel de les mettre à jour vers des versions plus récentes maintenues par la communauté. Contactez-nous pour planifier un audit de votre projet existant : nous bâtirons ensemble le scénario technique de votre montée de version. De plus, nous serons présents à la SymfonyCon Bruxelles la semaine prochaine en tant que sponsors Platine ! Vous aurez l'occasion d'assister aux talks d'Allison Guilhem, Antoine Bluchet et Kévin Dunglas sur scène. See you there !