Symfony 7.2 est lĂ !
Salut collÚgue développeuse / développeur,
Ăa fait un moment depuis le niveau 6 ! Jâai testĂ© pas mal de choses (sortie de Symfony 7.2 oblige) et donc produit un peu moins de contenu. Jâai Ă©galement effectuĂ© ma premiĂšre contribution Ă Symfony ce qui mâa pris quelques soirĂ©es đ (mais je te raconte tout ça un peu plus loin).
Nous voici Ă la 7Ăšme newsletter avec plus de 370 inscrites et inscrits Ă ce jour ! Merci encore pour ton soutien đ
Si tu veux m'aider Ă faire dĂ©coller encore ce nombre đ, n'hĂ©site pas Ă partager avec tes collĂšgues qui comme toi, souhaitent performer en Symfony.
Et si tu nâes pas encore abonnĂ©(e) et que tu ne veux pas rater les prochaines Ă©ditions, clique sans plus tarder sur le bouton ci-dessous.
Les nouveautés de Symfony 7.2
Je ne vais pas faire la liste de toutes les nouveauté de cette nouvelle version, tu trouveras cela sur le blog officiel, notamment dans cet article qui prend le temps de recenser toutes les nouveautés.
Jâai trouvĂ© cela plus intĂ©ressant de sĂ©lectionner 3-4 points Ă dĂ©velopper et Ă mettre en pratique dans de courtes vidĂ©os
Nouvelles contraintes Week et WordCount
De nouvelles contraintes font leur apparition, notamment Week et WordCount qui permettent respectivement
de sâassurer quâune valeur correspond Ă une semaine et que celle-ci se trouve entre deux semaines dĂ©finies (exemple entre la 40Ăšme et la 51Ăšme de 2024)
de contraindre le nombre de mot dâun texte (min et/ou max), ce qui peut venir en complĂ©ment dâune contrainte Length qui se contente de compter le nombre de caractĂšre et non le nombre de mots.
Desktop Notifications (et finishedIndicator pour le Progress Indicator).
Dans cette autre vidĂ©o, je prend le cas dâune commande symfony qui serait un peu longue Ă sâexĂ©cuter, et comment mieux suivre sa progression grĂące Ă ces 2 nouveautĂ©s :
ajout dâune barre de progression Ă lâaide du Progress Indicator (Symfony 7.2 ajoute la possibilitĂ© de changer lâicĂŽne quand câest fini)
notification de bureau (Desktop Notification) pour alerter de la fin de la commande (ajout au composant Notifier)
PasswordStrength constraint
Une autre nouveautĂ© intĂ©ressante est lâajout dâun estimateur de complexitĂ© sur les mots de passe. Il Ă©tait jusquâalors possible de contraindre quâun mot de passe ait un certain niveau donnĂ© de complexitĂ©, mais pas de connaitre ce niveau (notamment si celui-ci nâĂ©tait pas suffisamment Ă©levĂ©). Câest chose corrigĂ©e maintenant grĂące Ă la mĂ©thode estimateStrength() de PasswordStrengthValidator.
Pour illustrer cette derniĂšre, jâai codĂ© via un Live component, un systĂšme pour indiquer en direct la complexitĂ© du mot de passe en train dâĂȘtre saisi, vous trouverez tout cela dans cette derniĂšre vidĂ©o :
Nouvelle gestion du token CSRF
On notera Ă©galement un nouveau systĂšme de token pour Ă©viter les failles CSRF. Le token nâest plus gĂ©rĂ© par une session, mais via un cookie et un script JS. Je ne fais pas ici de vidĂ©o car le mĂ©canisme nâest pas rĂ©ellement visible, cependant ce changement important est activĂ© par dĂ©faut, et sâil y a toujours un champ hidden dans les formulaires, celui-ci ne contient plus de token mais une valeur de type
<input type="hidden" id="product__token" name="product_token]" data-controller="csrf-protection" autocomplete="off" value="csrf-token">Nouveauté de Symfony UX
Les nouveautĂ©s dans Symfony ne sâarrĂȘtent pas lĂ , car il y a Ă©galement du nouveau cĂŽtĂ© Symfony UX.
Tout dâabord dans le nouveau composant UX-Map, la plus grosse nouveautĂ© est le support de cette map au sein dâun LiveComponent, ce qui nâĂ©tait pas possible jusquâalors ! Il faudra ajouter un use ComponentWithMapTrait Ă la classe de LiveComponent. Cette ajout offre de formidable perspective pour dynamiser des cartes au sein de Symfony.
Autre nouveautĂ© dans UX-Map, le support de Polyline en plus de Polygone, ce qui permettra dâajouter une ligne sur une carte (utilie pour dessiner un itinĂ©raire par exemple, je te prĂ©pare trĂšs bientĂŽt un ensemble de vidĂ©os sur ce sujet).
Pourquoi je te parle de cette derniĂšre fonctionnalitĂ© ? Câest par ce que jâen suis lâauteur, et câest ma toute 1ere contribution Ă Symfony ! Plus de dĂ©tail dans la partie suivante si te veux un retour dâexpĂ©rience Ă ce sujet.
Retour dâexpĂ©rience : jâai fait ma premiĂšre PR Symfony đ€
Jâutilise Symfony depuis sa version 2, plus de 10ans maintenant. Et pourtant, pourtant⊠je nâavais jamais contribuĂ©. Pourquoi ?
Pour ĂȘtre transparent, je crois tout simplement que câest intimidant, Ă plusieurs niveaux :
Peur de la complexitĂ© : on a beau savoir utiliser Symfony, y contribuer ce nâest pas la mĂȘme histoire. En tant que dev, on nâa finalement assez peu lâoccasion de se plonger dans les entrailles de la bĂȘte. Alors oui de temps en temps, on parcours quelques fichiers, mais de lĂ Ă se poser, comprendre comment ça fonctionne au point de pouvoir apporter une modification, câest une autre paire de manche.
Est-ce que câest vraiment aussi compliquĂ© quâon le pense ? Sans doute pas, mais ça demande un certain investissement.
Peur de lâĂ©cosystĂšme : faire sa modification câest une chose, mais Symfony câest un framework qui a de nombreuses rĂšgles et bonnes pratiques. Il faut valider de nombreux checks pour que la PR passe (tests, linters, etc) et ce nâest pas toujours Ă©vident de comprendre toute cette configuration en local. Et il faut que ça passe les relectures par de vrais humains, et lĂ on passe au point suivant.
Peur de passer pour un mauvais dĂ©veloppeur : on retrouve notre bon vieux pote, le syndrome de lâimposteur⊠et si je nây arrive pas, si je me plante, si on refuse ma PR ? Le tout publiquement visible par la communauté⊠Câest peut-ĂȘtre moins long et moins risquĂ© de faire une issue et attendre que quelquâun de meilleur, de plus lĂ©gitime le fasse (peut-ĂȘtre) un jour Ă ma place.
Alors pourquoi je me suis lancĂ© ? La curiositĂ© peut-ĂȘtre, mais pour ĂȘtre tout Ă fait honnĂȘte et pragmatique, je dirais, le besoin de cette fonctionnalitĂ© rapidement, tout simplement.
Mais laisse moi replacer un peu le contexte. Je dĂ©cide de lancer une nouvelle sĂ©rie de vidĂ©os pour ma chaĂźne Youtube, pour prĂ©senter comment faire un systĂšme dâitinĂ©raire, en se basant sur UX-Map et des API (adresse.data.gouv et OSRM). Donc je veux 2 champs texte dans lesquels je vais pouvoir chercher des adresses, les suggestions dâadresse vont apparaitre.
Je sĂ©lectionne sur une adresse pour avoir le point de dĂ©part (le marqueur apparait sur la carte), puis la mĂȘme chose pour lâarrivĂ©e (un second marqueur). Du classique dans le fonctionnement, mais en utilisant un max de Symfony UX. Ăa me demande dĂ©jĂ pas mal de temps, mais jâarrive Ă obtenir ce que je veux.
Ensuite je passe Ă lâutilisation dâOSRM pour calculer lâitinĂ©raire, lĂ encore pas mal dâessais et jâobtiens enfin un JSON de retour avec une sĂ©rie de coordonnĂ©es correspondant au chemin prĂ©cis Ă suivre, câest ce qui est appelĂ© une polyline (une ligne formĂ©e de X coordonnĂ©es, qui permet de superposer un trait sur la carte pour indiquer la route Ă suivre).
Et lĂ , aprĂšs dĂ©jĂ plusieurs heures dâinvestissement, arrivĂ© Ă la toute derniĂšre Ă©tape⊠je me rends compte quâUX map (qui est un composant super rĂ©cent) ne permet pas encore des Polylines, seulement des polygones⊠tout mon projet tombe Ă lâeau đ
Alors je regarde un peu comment tout ça est fichu, et je me rend compte que dans Leaflet (la librairie qui gĂšre le rendu de carte) y a une bien une classe Polyline en plus de Polygon, qui fonctionne quasiment pareil (en gros le polygone va âfermerâ la polyline en rejoignant le point de dĂ©part et dâarrivĂ©e, et gĂ©rer le remplissage de la forme). Or, dans le code dâUX map, y a bien la classe Polygone đ€.
Alors je teste quelque chose, comme ça vite fait. Je duplique la classe et je la renomme en Polyline. Puis je cherche toutes les occurrences de polygon dans le dossier vendor, je les duplique et renomme en polyline. Et au bout de pas mal de copier/coller, miracle, jâarrive Ă afficher ma polyline, ça fonctionne youpi ! Mais mince, je viens juste de faire des modifications dans vendor, donc aucun intĂ©rĂȘt⊠Pourtant la fonctionnalitĂ© est intĂ©ressante et jâen ai besoin rapidement⊠voilĂ je me dĂ©cide Ă contribuer et commence le parcours du combattant.
Je regarde comment contribuer Ă Symfony UX, je fork le repo, et je me met Ă refaire des copier/coller depuis mon vendor de projet vers le code de Symfony. Et lĂ encore aprĂšs un peu de temps, jâarrive Ă faire fonctionne ma polyline, youpi jâai fini⊠ou pas !
Je me rend vite compte que je nâai fais mes modifs que pour Leaflet⊠or UX map gĂšre aussi Google Map⊠Si je ne push que pour Leaflet, ça ne passera jamais⊠Donc me voilĂ Ă regarder comment ça fonctionne sur lâAPI Google Map (que je nâutilise jamais), et Ă adapter encore Polygon en Polyline. Je duplique tout (sans trop rĂ©flĂ©chir) et⊠une fois encore ça fini par fonctionner !!!
Alors tout content, je push ma 1Ăšre PR et là ⊠je dĂ©chante ! Jâai lâhabitude dâutiliser Github Action en entreprise, la CI qui lance un linter, des tests, quelques checks⊠Mais lĂ Symfony UX câest plus de 60 checks, et vraiment beaucoup de fail â
Par contre, jâai Ă©tĂ© impressionnĂ© de la rapiditĂ© des mainteneurs (merci kocal et smnandre). Jâai tout de suite des retours encourageants et bienveillants sur la PR. Bon, remotivĂ©, je me dis quâil nây a que quelques tests Ă vĂ©rifierâŠ. Mais la structure du repo de Symfony UX est particuliĂšre, câest un monorepo qui contient tous les sous-projets, et les âbridgeâ pour Leaflet et Google map sont eux mĂȘme sur dâautre repository en lecture seule. Bref câest pas facile Ă suivre. De ce fait, la configuration pour lancer les builds, les tests etc, nâest pas âclassiqueâ, câest sans doute lĂ que jâai le plus galĂ©rer (et le fait que ne fasse pas de Typescript ça nâaide pas). Bref, je me retrouve Ă essayer de comprendre tant bien que mal comment tout ça fonctionne, car ni les tests JS, ni les tests PHP ne passent. Mais je nâarrive pas Ă les lancer correctement chez moi. Au bout dâun long moment (oĂč jâai songĂ© plusieurs fois Ă jeter lâĂ©ponge) je demande de lâaide et jâai rapidement des retours qui mâaident petit Ă petit Ă mieux comprendre lâenvironnement.
Les jours passent, les croix rouges diminuent et enfin, Ă un moment, tout passe enfin au vert â ⊠reste seulement quelques conflits. Car câest lĂ aussi la beautĂ© dâun projet opensource de cette ampleur : il est trĂšs actif donc il faut trĂšs rĂ©guliĂšrement rebase son code (avec potentiellement beaucoup de conflits) Et une fois ce dernier rebase effectuĂ©, bien entendu les tests ne passaient Ă nouveau plusâŠ đ€Ż encore du temps, encore des aller retours, du rouge sur Github Action dont je ne comprends pas lâorigine⊠mais je mâaccroche.
Simon AndrĂ© qui maintient le repo et dont vous pouvez lire lâinterview dans le prĂ©cĂ©dent niveau, mâa gentiment proposĂ© son aide car il me restait un tout dernier test qui ne passait pas et je ne comprenais pas⊠mais mystĂšre il lâa relancĂ©, câest passĂ©, il mâa renvoyĂ© un mail pour me dire. Je retourne sur la page des PR et lĂ sueur froide, ma PR a disparue đ± mais non, je vĂ©rifie, fĂ©brile, il a mergĂ©, youpi !!!
Au final, une sacrĂ©e aventure. Jâai juste ajoutĂ© quelques lignes Ă ce projet, mais jâai lâimpression dâavoir soulevĂ© une montagne tellement jâai galĂ©rĂ© avec la CI. Au final 2 semaines 1/2 pour passer une simple PR, câĂ©tait Ă©prouvant.
Alors est-ce que je voudrais recommencer ? Oui je pense, car mĂȘme si câest dur de ne pas rĂ©ussir aussi vite que lâon voudrait, ça montre que la persĂ©vĂ©rance, quâaccepter de demander de lâaide, ça permet de rĂ©ussir au final, et ça ça nâa pas de prix.
Quelques jours aprĂšs (jâespĂšre y avoir contribuĂ© un peu par mes remarques đ), jâai vu quâune PR avait Ă©tĂ© faite pour Ă©toffer la documentation qui explique comment contribuer :-) Ce projet est impressionnant (comme beaucoup dâautres projets Open-source) car il y a trĂšs peu de mainteneurs par rapport au nombre dâutilisateurs. Mais ils sont rĂ©actifs, Ă lâĂ©coute, bienveillants, prĂȘt Ă aider. Ăa mâa vraiment motivĂ© et mĂȘme si la contribution reste trĂšs minime, je suis fier dâavoir rĂ©ussi Ă aller jusquâau bout (et de partager ce retour dâexpĂ©rience avec toi !) Alors la contribution Ă Symfony ? Oui, je recommande !
Conclusion
Je préfÚre poster moins souvent, mais privilégier le contenu que je trouve intéressant. Et ce nouveau level me semble finalement bien complet :-)
Pour ma part, je termine ma mission actuelle et serai disponible Ă partir de Janvier. Alors si ton entreprise cherche Ă booster son Ă©quipe avec un freelance expĂ©rimentĂ©, câest le moment ou jamais de me contacter, directement sur mon Linkedin ou sur levelup@sylvainblondeau.dev
Si cette newsletter t'a plu, nâhĂ©site pas Ă repartager et en parler autour de toi.
Ă trĂšs bientĂŽt pour le prochain niveau ;-)






