Retour sur le SymfonyWorld Online 2022 Summer Edition
Voici donc un résumé de quelques talks de cette 4ème édition du SymfonyWorld online.
Keynote par Fabien Potencier
Comme à son habitude, Fabien Potencier (CEO de Symfony) a su nous embarquer dans son récit lors de sa keynote d’ouverture. Il nous a expliqué comment un bug dans le composant ExpressionLanguage de Symfony l’a conduit à travailler sur une nouvelle version de Twig.
L’histoire commence par un test fonctionnel, exécuté via Blackfire, qui s'est mis à échouer après la refonte du site de Symfony.
Ce test permet de vérifier la présence d’un span “Newer posts” sur la 1ère page du blog. En inspectant le DOM, le développeur constate que cet élément est bien présent, donc pour quelle raison le test échoue-t-il ? Est-ce le test qui est mal écrit ?
Après de longues heures de debug, il s’est avéré que l’opérateur “matches” utilise la fonction preg_match de PHP. Cette fonction émet un warning lorsque la regex à matcher est invalide, causant l’échec du test.
Fabien a donc décidé qu’au lieu de juste corriger son test, il serait bienvenu de modifier le composant ExpressionLanguage de Symfony, pour que matches émette une erreur plus parlante lorsqu'une expression régulière invalide lui est passée. C’est en donnant l’exemple qu’il se permet d’insister sur l’importance de la participation de chacun au projet open source qu’est Symfony. C’est avec la contribution de la communauté que l’outil s’améliore : un problème que l’on rencontre va forcément être rencontré par quelqu’un d’autre.
Mais ce n’est pas encore fini (après on s’étonne quand les devs timesheetent 3 jours sur un “tout petit” bug !) : le composant ExpressionLanguage de Symfony étant une version simplifiée des expressions Twig, Fabien s’est également attelé à corriger “matches” pour le langage de templating. En faisant ce correctif, il s’est rendu compte que le code de Twig 3 était vieillissant et qu’il serait peut-être temps de sortir une nouvelle version ! Celle-ci contiendrait la gestion des arguments nommés, le correctif d’incohérences sur la précédence des opérateurs “not” et “??”, la revisite des macros, etc... Et par la même occasion, pourquoi pas faire de cette nouvelle version de Twig, un composant de Symfony 6.2 ?
What's new in Symfony 6.1? par Nicolas Grekas
Pour son talk, Nicolas Grekas a choisi de nous présenter les nouveautés de la version 6.1 de Symfony, qui vient tout juste d’être publiée en mai 2022.
Il commence sa présentation par un rappel des process mis en place et utilisés par les membres de la core team Symfony (dont il fait d’ailleurs partie !) afin de maintenir la stabilité du framework tout en continuant de sortir des nouveautés.
Une nouvelle version majeure (4.0, 5.0, 6.0, ...) est prévue tous les 2 ans. Pour chaque version majeure sort une version LTS (Long Time Support), maintenue 3 ans en termes de bugs, et 4 ans en termes de sécurité.
Une nouvelle version mineure (5.1, 5.2, 5.3, ...) sort tous les 6 mois. Entre chaque version les règles de rétrocompatibilité sont très strictes, afin de permettre aux développeurs de passer en toute confiance d'une version mineure de Symfony à la suivante.
Après avoir rappelé que la version 6.0 a surtout servi à supprimer le code déprécié en version 5, Nicolas passe aux nouveautés de Symfony 6.1 (la liste complète est disponible ici) :
- Passage de la version minimale de PHP à 8.1. Cette modification permet de régler des problèmes avec le reloading sur PHP 8.0 ;
- Modernisation du code afin l’adapter à l’utilisation de PHP 8.1 : utilisation de $callable(...), de l’expression “match”, de l’opérateur ??=, de la fonction array_is_list, etc. ;
- Amélioration de la déclaration de types.
- Amélioration des performances :
- De Symfony lorsqu'il tourne sous Docker sur Mac,
- Du composant Validator, en déplaçant de la logique en dehors du constructeur,
- De l’EventDispatcher en évitant d’instancier des listeners non utilisés.
- Ajout de fonctionnalités sur le WebProfilerBundle :
- Mise en place d’un bouton permettant de télécharger les pièces jointes des mails,
- Ajout d’un bouton pour copier une requête HTTP en cURL,
- Affichage des rôles hérités,
- Ajout d’un panel sur le profiler, afin de voir le détail de la sérialisation/normalisation.
- Facilitation de l’auto-complétion des arguments et options sur la Console ;
- Amélioration du composant ExpressionLanguage :
- Possibilité d’utiliser le séparateur underscore sur les nombres,
- Apparition de nouveau opérateurs : contains, starts with et end with,
- Support de l’opérateur null?->safe,
- Ajout du composant HTMLSanitizer, permettant de sécuriser les saisies utilisateurs ;
- Sur le HTTPKernel :
- Facilitation de la création de bundle (Jan Schädlich a expliqué cela en détails dans sa conférence “Demystifying Bundles”),
- Ajout de nouveaux resolvers : EnumValueResolver, UidValueResolver, DateTimeValueResolver.
Little-known Symfony components that are worth a look par Alexandre Daubois
Lors de sa conférence, Alexandre Daubois (Développeur chez SensioLabs) nous a présenté 5 composants Symfony peu connus qui valent pourtant le détour :
- HTMLSanitizer : Publié en mai 2022 avec la version 6.1 de Symfony, le dernier né des composants Symfony a pour but d’améliorer la sécurité et la validation des contenus générés par les utilisateurs d’une application.
Si vous utilisez des WYSIWYG sur votre site web, ce composant est fait pour vous, alors n'hésitez pas à le tester ! - String : Publié en novembre 2019 avec Symfony 5.0, ce composant permet une manipulation facilitée des code points et des grapheme clusters.
- OptionsResolver : Publié en 2012 avec Symfony 2.1, ce composant offre une alternative améliorée à l’utilisation de la fonction array_replace. Il permet en effet la création d’un système d'options (valeurs requises, valeurs par défaut, validation, callbacks, …), afin de s’assurer de la cohérence des données d’un tableau ;
- Intl : Publié en mai 2013 avec la version 2.3 de Symfony, Intl facilite la gestion de l’internationalisation d’une application en fournissant des méthodes permettant de manipuler les dates, les chiffres, les monnaies, etc. ;
- Process : Ce composant publié en juillet 2011 avec Symfony 2.0, permet de lancer des commandes externes en tenant compte des différences entre les OS et en échappant les arguments afin d’éviter les problèmes de sécurité.
Il remplace les fonctions PHP telles que exec, passthru, shell_exec et system.
Autres conférences à regarder
D’autres conférences non détaillées dans cet article ont aussi été très intéressantes, mais méritent d’être vues ou détaillées dans un article dédié, plutôt que résumées ici :
- Writing Testable Symfony Apps par Anna Filina (+ de tests unitaires et d'intégration que de tests d'acceptance et d’interface utilisateur) ;
- Developing a decentralized web application with Symfony and API Platform par Kévin Dunglas (un projet Solid!) ;
- The Single-Page Application Dilemma par William Pinaud (à regarder en vitesse 0.5, tant pour apprécier les blagues et les références pop-culture que pour s’imprégner pleinement du contenu 😊) ;
- Symfony UX: New Components, Live Twig & More Updates! par Ryan Weaver (pour que les développeurs back puissent se débrouiller sans développeurs front ?).
Pour conclure, en tant que développeur PHP et Symfony, il est toujours bon d’avoir vent des dernières nouveautés et d’astuces utiles. Cette fois encore, les speakers nous ont gâtés par leurs présentations de qualité, aux sujets intéressants. Les conférences de cette nouvelle édition sont d'ores et déjà disponibles en replay sur le site de Symfony (à condition d’acheter un ticket d’entrée !).
Vivement la Winter Edition !
Crédits photos :
- vectorplusb
- Symfony World