Quable à la SymfonyLive 2022

Quable dev team
Quable
Published in
6 min readMay 2, 2022

Après deux années tumultueuses, retour à un événement plus semblable à ceux ayant eue lieu avant l’épidémie, l’apéro communautaire en moins. 😢

Durant ces deux journées du 7 et 8 avril 2022, plusieurs membres de l’équipe Quable ont donc assisté aux 14 conférences proposées lors de cet événement, à la Cité Internationale Universitaire de Paris.
L’occasion de revoir des visages familiers et d’échanger autour de réflexions techniques ou conceptuelles, ou bien sur des sujets moins formels.

De nombreux partenaires étaient une nouvelle fois sur place, proposant présentations, démonstrations en live, ainsi que jeux concours et autres goodies.

Certains membres de l’équipe Quable ont — chacun — sélectionné une conférence afin de vous en faire un petit résumé.

Keynote — Fabien Potencier

On commence comme chaque année par une keynote d’ouverture menée par Fabien Potencier.

Fabien nous guidera, au travers d’un parcours de correction d’une anomalie, sur les différentes réflexions qui l’ont mené à une montée de version et une intégration de Twig en tant que composant Symfony 6.2. Intégration qui permettra à Twig de suivre le même cycle de développement que les autres composants, facilitant ainsi son utilisation, mais également sa gestion par les équipes de Symfony.

Une présentation pleine d’humour nous mettant en position de contributeur. L’objectif étant également d’encourager l’auditoire, en décrivant pas à pas la facilité avec laquelle il est possible de participer à l’amélioration de tous ces projets opensources qu’englobe le framework Symfony.

slides : https://github.com/SymfonyLive/paris-2022-talks#keynote

par Sebastien

Du DDD avec API Platform — Robin Chalas , Mathias Arlaud

Dans cette conférence, Robin et Mathias nous montre comment, grâce à la flexibilité d’ApiPlatform, mettre en place une architecture hexagonale avec ApiPlatform.

La présentation est basée sur la future version 3 d’ApiPlatform. On peut ainsi voir les nouvelles conventions de nommage mais également l’impact qu’auront les attributs PHP 8 & 8.1 sur notre manière de développer avec cette librairie. C’est d’ailleurs la principale différence avec la conférence qu’ils avaient faite sur le même sujet au Forum PHP 2021.

L’idée est de séparer le code entre 3 couches : Infrastructure, Application et Domain (de la plus haute à la plus basse) et de restreindre l’accès d’une couche uniquement à celle du dessous. Ainsi, nos règles métiers (couche Domain) sont protégées en cas d’évolution des autres couches. Avec ce découpage, on peut également démarrer le développement d’une nouvelle fonctionnalité sans avoir arrêté les choix techniques. Néanmoins, le développement prendra plus de temps et on ne pourra plus profiter des synergies RAD qui font la force principale d’ApiPlatform comme par exemple la génération d’un CRUD complet avec l’attribut #[ApiResource].

Concrètement, pour réaliser une opération d’écriture, on devra implémenter le pattern CommandBus, une classe représentant l’exposition API de notre objet métier, ainsi que la “plomberie” ApiPlatform pour connecter le tout (l’opération et le data transformer). Pour une opération de lecture, c’est sensiblement pareil sauf qu’on parlera de pattern QueryBus.

Pour voir l’implémentation en détails, vous pouvez consulter le repository Github.

slides : https://github.com/SymfonyLive/paris-2022-talks#du-ddd-avec-api-platform

par Yannick Snobbert

Doctrine, objet typé, et colonne JSON — Grégoire Pineau

Enfin une solution aux problématiques de configuration d’entité.

A l’image de Wordpress, Drupal et autres, les configurations de blocks finissent souvent dans des tables à part, créant ainsi des soucis de performance due à la présence de JOINs, serialization multiple ou en cascade, etc.

Ici, Grégoire Pineau nous propose une solution viable et solide avec un typage fort et un usage très proche de nos entités Symfony classiques. L’idée est simple : stocker son entité classique agrémentée d’une colonne JSON, wrappée dans un custom type Doctrine. L’usage l’est tout autant : création du block, création de la configuration, instanciation, persist, flush, enjoy.

Seule la mise en place est un peu complexe : il faut manipuler l’injection de serializer doctrine (si Doctrine < v3), préciser manuellement à Doctrine comment faire des snapshots pour l’unit of work pour prendre en compte les modifications.

Heureusement, Grégoire nous couvre de snippet et de conseils utiles pour construire proprement et assurer la maintenance avec sérénité de cette fonctionnalité.

slides : https://github.com/SymfonyLive/paris-2022-talks#doctrine-objet-typ%C3%A9-et-colonne-json

par Quentin Decaunes

Code asynchrone dans une application Symfony synchrone — Jérôme Tamarelle

L’auteur nous présente dans ce talk son retour d’expérience, en tant que lead developer chez Prisma Media, de sa mise en place de l’affichage d’une grille de programmes pour Télé-Loisir, via l’utilisation de code asynchrone.

On commence par un rappel bienvenue des outils d’ors et déjà à disposition des développeurs PHP pour réaliser ce genre de code : ReactPHP, Amphp, Swoole, DriftPHP, Guzzle pour ce qui est des librairies, ainsi que stream_select() et curl_multi_select() pour ce qui est des méthodes natives à PHP, mais aussi la classe Fiber en natif avec PHP8.1+ (ou PHP8 sous forme d’extension php). Sachant que la plupart de ces librairies se basent en définitive sur l’une ou l’autre de ces méthodes natives. A noter toutefois que l’extension pour PHP7.2+, Parallel (https://www.php.net/manual/en/intro.parallel.php), n’a pas été mentionné.

L’orateur parle également des composants symfony qui permettent de faire du synchrone ou de l’asynchrone, à savoir :
- HttpClient pour les I/O non-bloquants, dans le cas plus restreint de l’asynchrone à travers des protocols de communication
- Process (avec start() + wait())
- Messenger (avec des consumers qui écoutent les messages queues).

Quelques exemples de code pour l’utilisation de ces divers outils sont fournis, avec une emphase sur les Fibers, qui permet un rendu de code qui ressemble à du code synchrone, tout en autorisant la déclaration de types classiques (array etc.) pour le typehint, et non pas des objets Promise ou Generator dans les autres cas. Un cas simple, mais plus complet, est donné à la fin, et offre une vision plus concrète du résultat. A retrouver ici : https://github.com/GromNaN/async-page-builder-demo

Vis-à-vis de son utilisation réelle en production, le découpage du code en composants indépendants, réutilisables et appelables à la demande, que requiert le DDD, couplé à de l’asynchrone, aurait grandement facilité le travail à son équipe. Notamment les relations entre designers/développeurs front/développeurs back, car la modification du design est très fréquente. Tout cela en plus des gains évidents en terme de performances globales, optimisations et usages du CPU etc., traditionnellement associés à l’usage de la parallélisation et/ou de la concurrence.

slides : https://github.com/SymfonyLive/paris-2022-talks#code-asynchrone-dans-une-application-symfony-synchrone

par Thomas Leprince

Développer une application web décentralisée avec Symfony et API Platform — Kévin Dunglas

Kevin Dunglas a décidé de nous parler du web décentralisé et comment redonner aux utilisateurs la propriété de leurs données personnelles.

La protection des données est redevenue un sujet important et, malgré le RGPD, nous savons que nos données utilisateurs sont collectées et revendues à des fins commerciales.

Pour répondre à cette problématique, nous avons pu découvrir deux nouveaux protocoles, Solid (Social Linked Data) et ActivityPub. Le projet Solid change le mode de fonctionnement des applications web afin de rendre le contrôle des données à l’utilisateur, et ActivityPub permet de créer des réseaux sociaux décentralisés.

Enfin, Kevin nous a partagé son client PHP (https://github.com/dunglas/solid-client-php) qui implémente ces deux concepts et qui peut être utilisé facilement au sein de Symfony.

slide : https://github.com/SymfonyLive/paris-2022-talks#d%C3%A9velopper-une-application-web-d%C3%A9centralis%C3%A9e-avec-symfony-et-api-platform

par Cedric Moncade

Après 2 ans à faire des conférences sur sa chaise de bureau, quel plaisir de pouvoir participer à une SymfonyLive vraiment en live ! Cette année, pas de talk en parallèle, mais des sujets variés — et pas nécessairement toujours très techniques — avec toujours des oratrices et des orateurs de qualité. Ceci augure du bon pour la SymfonyCon à Disney en fin d’année.

Certains speakers ont mis très tôt à disposition les slides leur ayant servis de support et, cette fois-ci, les replay vidéos des interventions ont été accessibles très rapidement, ce qui est toujours très appréciable. Seul petit bémol au niveau de l’organisation, malheureusement récurrent au vue de l’espace disponible et du nombre de participants : la file d’attente pour les vestiaires ainsi que l’accès aux boissons. Petite pensée pour les 3 pauvres serveurs de café assaillis par une horde de développeurs à chacune des pauses… Cela montre bien le succès croissant du framework finalement !

En définitive, nous sommes très heureux d’avoir pu participer à cet événement. On espère avoir titillé la curiosité chez ceux qui ne connaîtraient pas. Et on vous dit à tous : on remet ça l’année prochaine !

--

--