Le blog

Retour sur le Symfony Live Lille 2019

Publié le 07 mars 2019

La semaine dernière, le Symfony Tour 2019 a posé ses valises dans la capitale des Flandres. Retour sur cette journée de conférences (sold out) où nous étions parmi les conférenciers et les sponsors !

Test de heading #

Keynote de Fabien Potencier

Cette journée a démarré avec un discours inaugural par Fabien Potencier et Nicolas Grekas qui, ensemble, ont présenté HttpClient et MIME, deux tous nouveaux composants Symfony.

Comme son nom le laisse entendre, HttpClient permet de faire des appels à des serveurs HTTP. Axé sur la simplicité d’utilisation, il fournit un moyen de construire et envoyer des requêtes ainsi que des flux de données via le protocole réseau à la base du Web, et bien entendu, de gérer les réponses obtenues une fois celles-ci arrivées. Si vous souhaitez utiliser ce composant pour effectuer des appels à des API REST, sachez qu’une classe dédiée à cet usage, ApiClient, est disponible, fournissant toutes les fonctions nécessaires pour réaliser vos requêtes. Utilisé en complément de BrowserKit, DomCrawler, CssSelector et HttpCache, HttpClient sera à l’avenir associée à une nouvelle librairie qui remplacera Goutte afin d’extraire des données d’une page Web (web scraping). Une librairie qui devrait être très complémentaire à Panther  (qui est déjà compatible avec Goutte, et le sera à coup sûr avec ce nouvel outil) ! Sous le capot, HttpClient est conçu pour ne nécessiter aucune dépendance. Il utilise bien entendu l’extension cURL de PHP si elle est disponible. Si elle ne l’est pas, c’est la fonction fopen() qui sera utilisée, fonction disponible de base sur toutes les installations de PHP.

Symfony MIME est quant à lui un composant de manipulation de message (comme les e-mails) qui servira de base à un futur composant qui, à terme, remplacera SwiftMailer. Une de ses classes, Email, permet la composition d’e-mails et fournit des méthodes nommées de façon claires et intuitives, pouvant être chaînées d’une manière relevant presque du langage naturel  :

use SymfonyComponentMimeEmail;

$email = (new Email())
    ->from('masterclass@les-tilleuls.coop')
    ->to('vincent.fuger@les-tilleuls.coop')
    ->subject('Symfony rocks poneys!')
    ->text("Hello!nWe provide some trainings on Symfony and API Platform, would you be interested?")
    ->html("<p>Hello!</p><p>We provide some trainings on Symfony and API Platform, would you be interested?</p>");

Tout comme SwiftMailer, Symfony MIME gère nativement le format HTML. Cette fonctionnalité est d’ailleurs très aboutie, puisqu’elle permet également d’embarquer du contenu qui sera attaché à l’e-mail en pièce jointe (par exemple, une image). Il est également possible d’utiliser le moteur de template Twig pour la composition des e-mails. Celui-ci reçoit alors automatiquement des informations sur l’e-mail comme le ou les destinataires, ou encore le sujet, ce qui est très utile pour personnaliser ses e-mails. Et puisque la rédaction d’une newsletter saillante relève souvent du parcours du combattant en raison de la prise en charge très limitée du CSS par la diversité de clients, le nouveau filtre inline_css vous fournira un moyen de rédiger votre style dans une balise HTML.

Organiser et optimiser une CI complète

Nous avons continué la matinée en compagnie d’Hubert Lenoir qui, dans une présentation inspirée des contes de fées, nous a donné quelques pistes pour améliorer notre intégration continue. Après nous avoir rappelé les bases des tests en back et en front, il a mis en avant quelques extensions pour Behat comme Behatch, qui fournit un grand nombre d’étapes communes à beaucoup de scénarios, ainsi que des solutions de test end-to-end comme BrowserStack, le service fournissant aux développeurs des machines virtuelles sur le cloud pour tester ses applications sur de nombreux appareils, ou encore CircleCI, qui fournit un moyen d’automatiser ces tests, à l’aide par exemple des scénarios Behat. CircleCI qui d’ailleurs, signale Hubert, propose également des moyens d’obtenir des captures d’écran ainsi que des logs de l’API de l’application.

Après avoir mis en place tout cela, on remarquera probablement que même si tout fonctionne, c’est extrêmement lent. C’est alors le bon moment de prendre du temps pour en gagner  ! Par exemple, il y a de bonnes chances que certains scénarios requièrent une authentification. Or, si c’est une bonne idée de vérifier que le formulaire d’authentification de l’application fonctionne, utiliser ensuite ce dernier pour chaque test n’est pas très intéressant et ralentit considérablement les scénarios. Il sera alors préférable d’envoyer une requête directement à la route chargée d’authentifier l’utilisateur. Ainsi, on évite le chargement d’une page entière pour rien. Autre axe d’amélioration, les fixtures  : plutôt que de les charger en base à chaque test, on peut tout à fait la dumper, puis la restaurer pour les tests suivants. Avec une base volumineuse, Hubert nous assure ainsi un gain de performance permettant de diviser par 6 le temps nécessaire à exécuter l’ensemble des tests. Enfin, il nous conseille vivement de préférer le WebDriver de Facebook à celui de Selenium, d’autant que la configuration dans Behat des deux outils est totalement identique.

Mercure : des UIs toujours synchronisées avec la base de données

Dans cette présentation, notre coopérateur Kévin Dunglas nous a proposé un petit tour d’horizon du protocole Mercure ainsi que de son intégration à venir dans la version 2.4 d’API Platform. Si vous l’avez manqué, un article de présentation du projet est disponible sur notre blog juste ici  !

Retrouvez ses slides : 

Les meilleurs bundles et outils pour vos applications Symfony

Ce fut ensuite au tour de Danielle Kayumbi Bonkoto de nous présenter les meilleurs bundles pour le développement avec le framework Symfony. Elle nous donne les consignes de base pour choisir le bundle à utiliser par rapport à d’autre :

  • le développement doit respecter le principe SOLID.
  • le nombre de téléchargements.
  • le nombre de contributeurs.
  • le nombre d’étoiles sur le dépôt.
  • la date du dernier commit.

Ces différentes informations, nous pouvons les trouver sur les plateformes telles que Github, Gitlab ou Packagist. C'est en se basant sur ces critères qu’elle nous a conseillé des outils comme php-cs-fixer ainsi que PHP Mess Detector (phpmd) pour analyser le code. Si vous préférez une solution en mode SaaS, le désormais bien connu SymfonyInsight devrait faire parfaitement l’affaire. En complément, nous pouvons également utiliser Grumphp, un outil, qui une fois installé dans les hooks de Git, bloquera le commit et affichera un visage furieux si votre code ne répond pas aux standards de codage de votre application.

Besoin de mettre en place un moteur de recherche  ? Les bundles FOSElasticaBundle (pour l’intégration d’Elasticsearch) et AlgoliaBundle (pour Algolia, l’équivalent en mode SaaS d’Elasticsearch) devraient vous intéresser. De nombreux autres bundles ont été présentés, n’hésitez pas à aller voir le dépôt GitHub contenant le projet de la démonstration à laquelle nous avons pu assister  : https://github.com/dkwavetech/sflive-bundle-outils.

API Platform, ce n'est bon qu'à faire un POC. FAUX !

Notre coopérateur Grégoire Hébert est également intervenu sur la scène de l'Auberge Stéphane Hessel pour montrer les mécanismes avancés d'API Platform. Avis aux absents, cette conférence sera aussi donnée au Symfony Live Paris dans 3 semaines ! 

Top 5 des raisons d’utiliser le serveur Web local de Symfony — la sixième va vous étonner  !

Nous terminons cette journée de conférences avec Kévin Verschaeve qui nous propose un petit tour des fonctionnalités proposées par le serveur Web local de Symfony. En effet, depuis quelques mois, Symfony propose son propre binaire permettant notamment de créer une nouvelle application et de la déployer sur le nouveau service SymfonyCloud en quelques commandes.

Le serveur Web local inclus dans ce binaire fournit différentes commandes comme le support de différentes versions de PHP installées sur le système et une gestion des logs améliorée, rendant ces derniers beaucoup plus lisibles en mettant en valeur les erreurs et les avertissements. De plus, il fournit un mini-serveur DNS permettant, en une commande, d’attacher le projet à un ou plusieurs noms de domaines, auquel un TLD .wip sera ajouté pour travailler en local. Si cette extension ne vous convient pas, elle est bien entendu modifiable dans la configuration de votre projet.

Enfin, si la ligne de commande, ce n’est pas pour vous, sachez qu’une interface Web est également disponible pour gérer vos noms de domaines. Le serveur supporte également le protocole HTTPS. Pour l’activer, il suffira d’une commande, et un certificat sera généré et installé sur le site. De plus, l’autorité de certification sera ajouté à la liste blanche du système afin de permettre un accès immédiat à votre application sans que votre navigateur ne vous embête à propos d’un certificat auto-signé. Dernier point, et non des moindres, le serveur local Web de Symfony supporte maintenant Docker  : désormais capable de communiquer avec les conteneurs locaux de votre projet, il permettra de ne plus avoir à créer de container Nginx ou Apache et PHP pour votre installation Docker locale.

Nous sommes ravis d'avoir pu assister à un Symfony Live dans notre belle ville. Les événements Symfony dans les Hauts de France ne nous sont pas inédits pour autant. Depuis plusieurs années maintenant nous nous impliquons dans l'organisation et le financement d'événements locaux orientés PHP et même JavaScript ! Vous voulez connaître les dates de nos futurs événements ? Suivez-nous sur Twitter et d'ici là, nous vous donnons rendez-vous à la fin du mois pour le Symfony Live Paris !

Le blog

Pour aller plus loin