SymfonyLive Paris 2022 – En chair et en os

SymfonyLive Paris 2022 - En chair et en os

Après 2 ans d’absence, le SymfonyLive faisait son retour en physique à la Cité Internationale Universitaire de Paris et nous a permis d’assister à un nouveau cycle de conférences de qualité ! Petit tour ce que nous y avons (re)découvert !

Keynote

L’ouverture du SymfonyLive Paris 2022 s’est faite avec un beau teasing de Fabien : « Twig 4 »… mais pas tout à fait.

En réalité, il nous a raconté l’histoire d’un bug dans le composant ExpressionLanguage (plus précisément dans l’expression matches), de comment il a été corrigé (rappelant dans la foulée la procédure pour contribuer à Symfony) et comment cela a provoqué au passage une régression dans un cas particulier.

Il nous a aussi appris que ce composant ExpressionLanguage est en fait à la base, une extraction d’une partie de Twig et qui a évolué en parallèle. Et c’est justement cette divergence qui a donné lieu, au fil des années, à plusieurs contributions à la fois sur le composant et sur Twig (quand l’un des 2 n’était pas oublié).

Et c’est cela qui a fait imaginer à Fabien une absorption de Twig dans Symfony en tant que composant dans Symfony 6.2 (profitant de l’outillage et la communauté de Symfony). Nous passerions donc directement de la version de Twig 3 à la version 6.2 !

Symfony et son éco-système

Un composant au sens Symfony du terme est une librairie de code autonome, au titre qu’elle peut être utilisée dans ou en dehors du framework. Alexandre Daubois nous en a d’ailleurs présenté quatre. Quatre composants de Symfony peu ou mal connus, et pourtant utiles dans certains contextes :

  • HtmlSanitizer : bientôt disponible en expérimental dans Symfony 6.1, ce nouveau composant fournira une API orientée objet pour purifier du contenu HTML, tout en se basant sur la future norme HTML Sanitizer API du W3C ;
  • String : API orientée objet permettant de travailler avec des chaînes de caractères (code points UTF-8, bytes & grapheme cluster) : slug, regex, pluralisation, etc ;
  • OptionsResolver : souvent utilisé via les Form Symfony, ce composant se veut être un « array_replace on steroids » pour créer un système d’options avec valeurs par défaut, options requises, validation, etc ;
  • Intl : fournit un accès aux données liées à la localisation : noms de pays, locales, monnaies, timezone, etc. Ce composant est en fait une surcouche de la librairie ICU.

Traditionnel sujet pour Nicolas Grekas, nous avons pu profiter d’une présentation (loin d’être exhaustive) de certaines nouveautés dans Symfony depuis un an :

  • Symfony 5.3 nous a ainsi apporté de nouveaux composants (RateLimiter, PasswordHasher, Runtime), des Translation Providers ainsi qu’une toute nouvelle couche de sécurité.
  • Symfony 5.4 / 6.0 apporte une nouvelle classe Path dans le composant Filesystem, de quoi gérer l’autocomplétion des commandes CLI, l’attribut PHP #[AsCommand] pour déclarer les commandes en évitant les propriétés protected classiques.
  • En Symfony 6.1, le WebProfilerBundle s’enrichit de plusieurs fonctionnalités (profilage du Serializer, pièce jointe des mails téléchargeables), l’autowiring devient possible via des attributs PHP, les types sont mieux décrits (typage natif et pseudo-types PHPDoc comme class-string<Foo>). Fait à noter, la version 6.1 demandera une version PHP minimale en 8.1 pour palier un bug du preloading en PHP 8.0.

Notons qu’il est important de suivre les annonces officielles via le blog de Symfony, afin d’être au courant d’événements comme la coupure des serveurs Symfony Flex (au profit d’un hébergement des recipes sur GitHub), et d’anticiper ce qui peut casser nos applications ou leur déploiement.

Nicolas nous a également rappelé l’importance de mettre à jour nos applications régulièrement, via un composer update tous les débuts de mois, et une montée de version mineure tous les 6 mois. Enfin, il a tenu à parler de ce qui fait la force de Symfony, à savoir sa communauté :

  • Des chiffres en 12 mois : 8000 fichiers modifiés, 470 000 ajouts, 430 000 suppressions, 2000 PR (soit 6 par jour !), 400 ajouts de feature, 700 corrections de bugs, 900 modifications mineures (non visibles dans les changelogs) ;
  • 3000 contributeurs ;
  • 23 membres dans la core-team ;
  • Aucune roadmap, seule la communauté est responsable des nouveautés apportées dans chaque nouvelle release.

Manipuler de la donnée

Deux JoliCodeurs étaient speakers à cette édition ! Marion a présenté « comment valider dynamiquement de la donnée avec Symfony », sujet dont nous avions déjà parlé sur le blog. Au-delà de la validation en général avec Symfony, c’est une mécanique complète pour valider des données complexes, sans en connaître préalablement les contraintes que Marion nous a exposé. Le tout, en parlant de Pokémon et d’évolution.

Conférence &quot;comment valider dynamiquement de la donnée avec Symfony&quot;

Une fois ces données validées, nous avons pu voir comment les enregistrer en base de données tout en conservant leur typage côté PHP. En effet, lors de son talk Doctrine, objet typé, et colonne JSON, Grégoire nous a montré différentes solutions potentielles pour répondre à la problématique, en expliquant pourquoi chacune de ces solutions n’était pas optimale. In fine, il nous a détaillé la solution retenue, qu’il utilise sur plusieurs projets : créer son propre type custom Doctrine, étendant le type natif json.

Sécuriser nos applications

Autre axe abordé lors de cette SymfonyLive, celui de la sécurité. Nous retenons ainsi la conférence de Marion Agé, qui est revenue sur le fonctionnement de la brique de sécurité dans Symfony, notamment la séparation entre authentication (aka « qui est connecté ? ») et autorisation, le système de Voter pour centraliser la logique des autorisations, etc.

Elle a également abordé les changements apportés par la nouvelle version de cette brique : nouvelles interfaces, Authenticators responsables de transformer une requête en Passport et Badges, adieu l’authentification anonyme et bonjour la non-authentification. En parlant d’Authenticators, nous notons que les besoins les plus classiques sont couverts nativement, que de nombreux autres sont disponibles dans la communauté et qu’il est évidemment possible d’écrire son propre authenticator pour répondre à n’importe quel besoin.

Autre conférence sur le même thème, Karim Pinchon nous a parlé des tokens JWT, en faisant tout d’abord un rappel sur ce qu’était JWT (JSON Web Token), les différentes formes (JWE, JWK, JWS, etc) ainsi que certaines attaques possibles à connaître : modifications des algorithmes dans les headers, brute force pour trouver le secret, modification des données chiffrées, etc.

Nous notons en résumé qu’il est conseillé de ne pas accepter tous les algorithmes de signature, qu’il vaut mieux préférer l’asymétrique mais surtout qu’il faut utiliser une librairie connue et éprouvée plutôt que d’écrire son propre système de vérification.

Une ouverture sur le monde

Plusieurs conférences portaient sur des sujets un peu moins techniques. On notera, par exemple, la conférence de Jérôme Vieilledent sur le temps. Avec des aires de sujet philosophique, Jérôme a réussi à faire le lien entre cette notion de temps et notre métier, le temps passé dans l’exécution de notre application étant corrélé à la consommation de ressources. Comme nous ne pouvons pas optimiser ce que l’on ne sait pas mesurer, il est revenu sur la différence entre le profiling, qui consiste à mesurer les performances à l’instant T, et le monitoring, plutôt lié à une surveillance en continue. Il appelait ainsi à une réflexion collective sur d’autres unités de mesures que le temps (ou la rapidité) pour mesurer la qualité de nos applications.

De son côté, Titouan Galopin nous a parlé de la plateforme « En première ligne » qu’il a eu l’occasion de créer au début de la crise du Covid pour mettre en relation des volontaires et des personnes ayant besoin d’aide. Il nous a expliqué en quoi le choix de Symfony a été pertinent et leur a permis de gagner du temps pour la réalisation du site. En abordant également un autre projet auquel il a participé pour aider les Ukrainiens lors du conflit en cours, Titouan a surtout invité le public du SymfonyLive à se mobiliser : face aux défis de la société actuelle, les développeurs ont en effet un fort pouvoir d’action, notamment en se rassemblant autour des outils open source.

Enfin, Kévin Dunglas a attiré notre attention sur la décentralisation du Web et l’importance de redonner aux utilisateurs la toute possession de leurs données. Initialement inventé pour permettre aux personnes marginalisées de s’exprimer, le Web est aujourd’hui un espace monopolisé et censuré par les GAFAM. Pour répondre à ces problématiques, la spécification Solid (abréviation de « social linked data ») permet aux utilisateurs de stocker leurs données de manière sécurisée et décentralisée dans des « pods ». Kévin, « serial contributeur » de réputation, nous a présenté son client PHP qui permet de développer des applications Solid et d’interagir avec les données stockées dans des pods Solid.

Pour conclure

Mis à part quelques soucis techniques (le jingle qui se lance en plein milieu d’une conférence 🤣) accueillis par le public avec humour, cette nouvelle édition du SymfonyLive a été un franc succès.

Parmis les petites attentions, nous avons apprécié les lunch bags prévus pour les collations du midi (en fonction du choix végétarien / poisson / viande fait à l’avance) et qui étaient assez copieux et qualitatif.

Les sujets abordés étaient dans l’ensemble intéressants. Des speakers qui ne se connaissaient pas 48h plus tôt faisaient référence aux talks des autres, apportant un esprit d’équipe supplémentaire à cette super édition 💪. Les slides et les démos sont listées sur un compte GitHub dédié et les talks devraient être bientôt disponibles en replay sur SymfonyCasts.

Nous avons déjà hâte de retrouver cette belle communauté pour la SymfonyCon 2022 à Disneyland Paris les 17 et 18 novembre prochains !

Nos formations sur le sujet

  • Logo Symfony

    Symfony

    Formez-vous à Symfony, l’un des frameworks web PHP les plus connus au monde

  • Logo Symfony avancée

    Symfony avancée

    Décou­vrez les fonc­tion­na­li­tés et concepts avan­cés de Symfo­ny

blog comments powered by Disqus