Symfony Live : Un événement PHP inédit à Lille

CBTW
L’Actualité Tech — Blog CBTW
7 min readMar 7, 2019

Vendredi 1er mars avait lieu la toute première édition Symfony Live à Lille.

Pour cette première de la Symfony Live à Lille, c’est l’auberge Stéphane Hessel qui accueillait l’événement, un lieu déjà rodé aux apéros PHP de l’AFUP dans la métropole lilloise.

Symfony Live à Lille
Begin — Symfony Live à Lille — Photo by Danielle MacInnes

Symfony Live oblige, Fabien Potencier, accompagné de Nicolas Grekas, ouvre le bal en présentant deux nouveaux composants qui devraient faire leur apparition pour la release de la version 4.3

Il nous donne sa vision de Symfony, qu’il considère comme une API au dessus de PHP. Il s’appuie sur des exemples de composants comme le VarDumper (extension de var_dump) ou encore HttpFoundation ($_GET, $_POST…).

Les 2 nouveaux composants à venir sur Symfony sont eux :

  • HTTPClient — Le futur client HTTP de Symfony
    Jusqu’à maintenant lorsqu’on veut appeler des API tierces depuis une application Symfony, soit on passe par Curl, soit on installait un bundle tel que Guzzle par exemple.
    Le futur composant est donc un client HTTP permettant de créer, envoyer et exploiter facilement des requêtes HTTP, vers des API externes par exemple.
    Parmi les avantages cités, on retient bien sûr l’intégration possible avec les autres composants, comme BrowserKit :
php$client = HTTPClient::create();$browser = new BrowserClient($client);

Le client gérera les appels asynchrones et d’autres features intéressantes.
Vous pouvez retrouver les différentes PR relatives à ce composant sur le repo Symfony : https://github.com/symfony/symfony/pull/30414

  • Symfony MIME
    Le deuxième composant présenté est le Symfony Mailer. Ou tout du moins la première moitié de ce qui constituera ce composant : Symfony MIME.
    L’objectif de Symfony Mailer est de remplacer SwiftMailer aujourd’hui utilisé par défaut dans les applications Symfony.
    Symfony MIME est donc la partie qui permet de construire et de manipuler les mails. Vous pouvez déjà retrouver le repo dédié : https://github.com/symfony/mime.

    À savoir : le composant MIME permet notamment de construire des templates de mail en s’affranchissant de la syntaxe en tableau nécessaire,
html<container><raw><column></column></raw></container>

s’inspirant ainsi de la librairie zurb/inky qui a d’ailleurs déjà une implémentation dans Twig.
La seconde partie devrait être présentée à la fin du mois lors du Symfony Live à Paris, affaire à suivre !

Les slides de la présentation complète sont disponibles : https://speakerdeck.com/fabpot/2-new-symfony-components-httpclient-and-mime

La matinée se poursuit avec Hubert Lenoir qui nous présente de manière un peu décalée : comment organiser et optimiser un CI complète ou “La fabuleuse aventure de la princesse CI au pays des tests”

Autour d’un cas pratique — deux APIs connectées à deux applications front en React — il nous fait un retour d’expérience sur la manière d’optimiser au mieux la suite de tests au travers de la CI (gérée par CircleCI), qu’il s’agisse de tests unitaires, fonctionnels, end-to-end, etc.

Parmi les tips donnés, il évoque :

  • L’importance de factoriser les tests nécessitant une authentification,
  • Isoler les tests chronophages pour ne pas retarder les autres,
  • Ne pas re générer les fixtures à chaque test (système de dump pour les reload plus tard).

Après la pause matinale, c’est Titouan Galopin qui présente au parterre de développeurs PHP : “React et Redux avec Symfony et Webpack Encore”

Après un bref historique sur React (né de l’importance d’organiser son code javascript avec une logique de “composants”), il nous fait une petite démonstration, code à l’appui.

Il rappelle qu’il est essentiel de comprendre que React est une librairie à la base pensée pour concevoir des interfaces utilisateur, ce n’est donc pas un framework complet. C’est d’ailleurs en ce sens que Redux est un bon complément pour notamment gérer le côté dynamique des pages, permettant alors de partager un état entre plusieurs composants.

Enfin, Titouan nous présente comment Webpack Encore permet d’intégrer facilement React à une application Symfony.

Pour terminer la matinée, c’est Kevin Dunglas qui nous présente l’une de ses dernières créations : “Mercure : des UIs toujours synchronisées avec la BDD”

Il s’agit d’une alternative entre les solutions de bas niveau comme WebSocket et de plus haut niveau comme socket.io ou Pusher par exemple.

C’est un protocole permettant notamment de :
- Gérer les notifications push,
- Synchroniser toutes les applications connectées en temps réel,
- Notifier les utilisateurs lorsque des tâches asynchrones sont terminées,
- Travailler collaborativement sur des mêmes ressources (comme sur un Google document par exemple),

Et qui présente les caractéristiques suivantes :
- Full duplex,
- Bâti au dessus de HTTP (POST) et SSE (Server Sent Event),
- Mécanisme d’autorisation,
- Mécanisme de reconnexion et renvoi des données en cas de perte de connexion,
- Fonctionne avec api REST ou GraphQL,
- Chiffrement de bout en bout.

Symfony Live à Lille
Pour plus de détails : https://github.com/dunglas/mercure et https://symfony.com/blog/symfony-gets-real-time-push-capabilities

Ce protocole qui peut être installé partout (écrit en GO) vient également avec une implémentation pour Symfony avec : symfony/mercure et symfony/mercure-bundle.

Pour terminer sa présentation, Kévin nous fait une démonstration d’implémentation dans Symfony avec le composant Messenger, qui permet en plus de stocker les notifications et de les dispatcher aux applications connectées au besoin.

C’est ensuite Grégoire Herbert qui nous parle d’API platform.

Beaucoup de ses premiers utilisateurs ont eu tendance à qualifier API platform de rapide pour faire du CRUD, mais pas adaptée quand il s’agit de faire des choses un peu plus custom.
Grégoire essaie de démontrer le contraire avec sa présentation “API Platform ce n’est bon qu’à faire un POC. FAUX !”

Après avoir un point de présentation sur API platform et les nouveautés de la version 2.4, il nous explique ensuite comment API platform se marie parfaitement à d’autres composants de Symfony tels que Messenger, Workflow ou encore Mercure.

C’est ensuite code à l’appui qu’il nous démontre comment créer un endpoint custom, hors du CRUD, avec de la documentation autogénérée.

Romarice Drigon nous présente ensuite quelques tips pour optimiser notre utilisation de Doctrine dans son talk “Doctrine en dehors des sentiers battus”

Parmi eux nous pouvons retenir :

  • Au lieu de faire des find($id), construire nos propres requêtes avec notamment l’utilisation des partial objects -> select('PARTIAL{id, name}') qui peuvent permettre de ne récupérer que les attributs nécessaires dans la requête et ainsi optimiser les temps d’exécution.
  • Dans la gestion des relations, bien comprendre la différence par exemple entre une cascade removeet un onDelete=CASCAD.
    Le premier est géré par l’ORM, quand le deuxième est directement géré par votre SGBD (ajout d’un tag on delete cascade sur la clé étrangère). Cela peut donc servir pour ne pas surcharger l’ORM inutilement.
  • Utiliser les filtres et Criteria Doctrine (ressource externe intéressante sur le sujet sur SymfonyCast).

Pour conclure cette journée Kevin Verschaeve, nous donne son “Top 5 des raisons d’utiliser le serveur web local de Symfony. La 6e va vous étonner !”

Dans ce talk Kevin revient sur la CLI symfony arrivée avec l’émergence de Symfony Cloud entre autres mais s’attarde en particulier sur la partie web server local.

Le top 5 donc :

  1. La simplicité
    Pas besoin d’avoir un apache configuré en local, ou un docker, un simple symfony serve permet de lancer le serveur local.
  2. Les logs
    Bien plus lisibles que les logs par défaut que l’on retrouve sur un Apache par exemple.
  3. Gestion des versions de PHP
    Vous pouvez aisément switcher de version de PHP, parmi celles installées sur votre machine.
  4. Gestion des noms de domaines
    Par défaut lorsque vous lancez le serveur local de Symfony, vous trouvez votre application sur http://127.0.0.1:8000. Vous pouvez désormais personnaliser cela grâce aux proxys et ainsi trouver votre projet sur monprojet.local.dev par exemple.
  5. Support du HTTPS
    Une ligne de commande pour installer un certificat localement, HTTP et HTTPS sur le même port.

Et en bonus : Docker
Le support de Docker qui vient d’être ajouté et qui permet donc au webserver local de Symfony de communiquer avec des containers Docker (pour vos services tel que Mysql par exemple).

Plus de détails sur les features de la CLI Symfony : https://symfonycasts.com/screencast/symfonycon2018/back-to-basics

La journée se terminant un peu plus tôt que prévue, Nicolas Grekas reprend la parole pour faire un petit point sur la philosophie Open source de Symfony et l’importance des contributions de chacun.

“Le code que vous utilisez dans vos business ne tombe pas du ciel”

Il ne s’agit pas d’une véritable citation, mais c’est le message qui a été transmis ;).

Pour information, il y a des PR sur le repo de symfony/symfony qui sont taggées “help wanted” ou encore “good first issue” et qui peuvent être un bon point de départ pour ceux qui voudraient contribuer mais sans savoir par où commencer.

Vous pouvez retrouver les coups de cœur de notre Partner Thifaine lors du Forum PHP 2019.

De plus, nos collaborateurs participent régulièrement à des événements phares du monde de la Tech. N’hésitez donc pas à vous abonner à notre compte Medium pour suivre nos prochains retours de conférences et réaliser votre veille professionnelle.

Retrouvez aussi nos publications et notre actualité via notre newsletter, ainsi que nos différents réseaux sociaux : LinkedIn, Twitter, Youtube, Twitch et Instagram

Vous souhaitez en savoir plus ? Consultez notre site web et nos offres d’emploi.

L’auteur

Olivier
Web developer & Loving dad

--

--

CBTW
L’Actualité Tech — Blog CBTW

Nos experts partagent leur vision et leur veille en développement web et mobile, data et analytics, sécurité, cloud, hyperautomation et digital workplace.