31/10/2018
Retour sur le Symfony Live Paris 2013
Des bonnes pratiques Symfony2 au PHPCR en passant par des fuites mémoire ou encore tirer parti de Postgresql, toutes ces conférences et bien d’autres ont retenu notre attention. Elles viennent alimenter la boîte à outils du développeur moderne (toute ressemblance avec l’actualité des boîtes à outils est purement fortuite).
Jeudi
Keynote
Cette keynote d’introduction au Symfony Live Paris 2013, par Fabien Potencier, portait sur les outils d’assurance qualité. Aujourd’hui les outils de test PHP ne sont pas toujours bien adaptés et pertinents. Beaucoup préconisent un code coverage de 100% et idéalement il faudrait. Mais en pratique tester – par exemple des getters et setters (généralement auto-générés par un IDE) – ne présente pas beaucoup d’intérêt. Par contre les outils d’analyse comme PHPLOC permettent d’avoir une vue d’ensemble et de calculer la complexité cyclomatique d’un projet.
Pour ces raisons, SensioLabs a mis au point un outil (encore en beta) qui évalue le projet dans sa globalité : il regroupe un ensemble d’outils de test, d’analyse et un code sniffer pour un projet Symfony2. Il permet ainsi d’obtenir une vue d’ensemble du projet avec des estimations de temps pour corriger les anomalies détectées et leur criticité. Son nom, SensioLabsInsight.
Le PHP Content Repository PHPCR
Adapté de Java Content Repository (JCR), PHPCR est un système de stockage de données. David Buchmann, développeur chez Liip, nous a présenté ce qu’est PHPCR et ce qu’offre son API.
Assimilable à un XML, on y trouve des nœuds, des propriétés et des valeurs. Le contenu est donc stocké dans une structure en arbre.
Système de stockage par défaut du Content Management Framework (CMF), une implémentation Symfony2 Doctrine PHPCR ODM est déjà disponible.
PHPCR trouve ses forces dans la facilité d’accès aux données, la rapidité de recherche ou encore le versioning. En revanche, PHPCR n’est pas adapté au contenu structuré où des jointures doivent être faites.
Voyage dans les entrailles du Container D’injection de Dépendances
Thomas, architecte logiciel chez Ekino et habitué des Symfony Live, a choisi cette année de nous emmener dans les entrailles du célèbre DIC de Symfony2 et de nous décrire les étapes de sa création. Pierre angulaire du framework, c’est grâce à lui que l’injection de dépendances est rendue possible et donc le cloisonnement des responsabilités.
De la manière la plus simple à la plus aboutie, Thomas a présenté l’écriture d’un service et les différentes solutions pour injecter ses dépendances. On a notamment pu voir le mécanisme permettant de créer et valider la configuration d’un bundle lors de la compilation du DIC, allégeant ainsi le code métier et le rendant plus performant.
Au secours, ma mémoire fuit !
Cette conférence – parmi les plus technique sans être inaccessible pour un novice – portait sur la gestion de la mémoire en PHP. Julien Pauli, architecte logiciel chez BlaBlaCar, y rappelle que derrière PHP se cache du C.
Plusieurs points ont été passés en revue : la façon dont les variables sont mémorisées, le poids des types, le ramasse-miettes (Garbage Collection), les améliorations de la gestion de la mémoire au file des évolutions de PHP, etc.
Pour les curieux, un tutoriel de Julien Pauli remontant à 2010 est disponible.
Symfony2: full REST API + push socket.io Backend for your Backbonejs apps
Guillaume Potier, co-fondateur et directeur technique de wisembly, nous a présenté les choix techniques d’un outil permettant de préparer un événement (réunion, séminaire, conférence…) et d’interagir en temps réel durant le déroulement de celui-ci.
Nous avons vu comment implémenter simplement une API REST basée sur Symfony2 et qui tire parti des bundles JMSSerializerBundle, FOSRestBundle ou encore NelmioApiDocBundle. Pour la partie frontend, leur choix s’est naturellement porté sur Backbone.js, candidat de choix de par sa facilité à consommer des API REST en json et ses similitudes avec la structure MVC de Symfony.
Guillaume Potier a ensuite évoqué l’un des principaux aspects de wisembly : le temps réel. Leur choix s’est très vite orienté vers Socket.io qui apporte beaucoup en terme de performance et de facilité d’implémentation. Node.js a également été utilisé pour la répartition des messages de client à client. Puis, Elephant.io pour l’envoi de messages du backend php à Node.js – qui sera ensuite en mesure de les ré-émettre au client. Pour garantir la distribution de données à tous les clients, ils ont rajouté Redis afin de stocker les messages à émettre et jouer ainsi un rôle tampon.
Ce que l’on peut retenir de cette présentation, c’est le découpage front/back via une API REST et un framework JavaScript ainsi que la recherche des technologies les plus à même de répondre à la problématique du temps réel (Node.js, Socket.io). On peut éventuellement se poser la question de l’utilisation d’un système de messenging type RabbitMQ en remplacement de Redis. À noter également qu’au moment où cette solution a été mise en place AngularJS était un framework relativement jeune, et qu’il saurait probablement répondre aussi bien, si ce n’est mieux aux besoins front de ce projet.
Symfony et eZ Publish: embarquement immédiat
eZ Publish est une plateforme CMS standard dans l’écosystème PHP. La version 5.x correspond à une évolution majeure pour ce CMS : nouvelles API ou encore nouvelle interface. Cependant, une des grosses nouveautés vient de l’intégration de Symfony2 full stack (contrairement à Drupal qui intègre seulement certains composants).
Ce qu’il faut retenir : eZ est encore en migration et il faudra attendre la version 5.2 (hiver 2013) pour avoir une solution 100% Symfony2. eZ Publish semble utiliser un seul gros bundle pour gérer son code. Cela ouvre la question de pouvoir utiliser certaines portions de son code vs. différents bundles unitaires : gestion de médias, gestion d’admin, etc.
Vendredi
Les Bundles que vous allez regretter de ne pas avoir connu plus tôt
Parmi plus de 2000 (déjà !) bundles répertoriés sur knpbundles.com, certains sont déjà très connus et reconnus, d’autres moins voire pas du tout. Pour autant, beaucoup d’entre eux méritent de l’être. Après le rappel de ce qu’est un bundle, Damien Alexandre, associé chez JoliCode, nous a cité les plus célèbres (FOS ou Sonata), puis ceux qu’il faut connaître et enfin les critères de choix d’un bundle.
Cette présentation a également mis en avant le fait que Symfony2 crée plus d’engouement que la version précédente, même si, ancienneté oblige, d’autres comme WordPress ou Drupal comptent plus de plugins et modules.
Amis développeurs, ne cédons pas à l’euphorie de la nouveauté, préférons produire de la qualité à la quantité.
Bien comprendre le cœur du Composant de Sécurité
Développeur chez SensioLabs, Joseph Rouff a choisi de nous exposer sous forme de user stories le Security Component de Symfony – composant souvent mal compris.
Joseph a présenté des concepts associés comme le Firewall, l’AuthenticationListener, le Token, l’AuthenticationProvider ou encore l’AccessDecisionManager.
Cette conférence était interactive avec des questions mettant en scène différents cas d’utilisation (faut-il implémenter ce service dans ce cas de figure ?, par exemple).
Au cœur de tout projet ou presque, cette présentation a permis de poser simplement ses grands principes.
Envoyer et authentifier des emails avec swiftmailer
Xavier De Cock, associé et développeur chez NxMailer, a choisi comme sujet Swift Mailer et, en particulier, comment envoyer et authentifier des mails.
Dans cette présentation très technique plus orientée configuration que développement pur, il explique pourquoi des mails sont reçus en spam ou encore pourquoi des images ne s’affichent pas par défaut mais surtout comment remédier à ces problèmes.
Du must have jusqu’à des configurations plus avancées, cette conférence apporte des solutions aux problèmes fréquemment rencontrés et montre comment augmenter la confiance des destinataires, améliorant ainsi la transmission et la lecture d’un message.
Comment organiser ses templates twig ?
Grégoire Pineau, développeur chez SensioLabs, a décidé de nous parler de Twig depuis son installation jusqu’à son utilisation.
Cette conférence visait à aider le développeur dans l’organisation de ses templates et voir comment mettre en place différents thèmes avec Twig sous Symfony, en fournissant des cas d’utilisation concrets. On a ainsi vu comment charger plusieurs répertoires de thèmes selon un certain ordre (fallback).
Différents tags ont également été passés en revue (include, use/block, embed, macro) afin d’expliquer comment et pourquoi les utiliser.
Silex, retour sur un an d’utilisation
Cette conférence de Mikael Randy, à l’époque développeur chez TEA, ne se voulait pas technique dans le sens formatrice à Silex, mais vraiment comme un retour d’expérience utile à ceux qui se posent la question “framework ou micro-framework ?”.
Présentation “courageuse” car il n’est jamais évident d’exposer ses erreurs, Mikael a su prendre du recul pour avoir un angle objectif, apprendre de cette expérience et la partager.
Ce qu’il faut en retenir : savoir où l’on doit aller pour savoir comment y arriver. Autrement dit, prendre le temps de la réflexion en amont pour s’épargner de devoir assumer de mauvais choix et d’essayer d’y remédier a posteriori. Il faut donc lister les composants nécessaires avant de commencer pour ne pas réinventer la roue.
Aller plus loin avec le JMSSerializer
Adrien Brault, étudiant à Supinfo, nous a présenté une vision avancée du bundle JMSserializer de Johannes M. Schmitt. Ce bundle permet de sérialiser en JSON, XML ou YAML un objet mais aussi de le désérialiser.
Il commence par nous présenter les améliorations syntaxiques qu’apporte la version 0.12. Puis, il nous détaille les différents composants permettant de comprendre le fonctionnement du bundle. Enfin, il met en scène son utilisation dans le but de customiser la sérialisation.
Nous voyons donc qu’il est possible de modifier la sérialisation d’un objet :
- en omettant certaines données,
- en modifiant le format / l’imbrication des différents éléments qui le composent,
- en utilisant la gestion des événements.
Tirez parti de Postgresql dans vos développements web
La présentation de PostgreSQL avec Pomm de Grégoire Hubert, freelance, était très enrichissante – sans avoir à connaître les outils. Le but était de présenter PostgreSQL couplé à Pomm, un OMM (Object Model Manager). Celui-ci est concurrent de Doctrine, Propel et de PDO qui, eux, ne prennent pas en compte les (nombreux) types de PostgreSQL (Circle, Point, HStore, …). L’orateur nous explique pourquoi l’ORM n’est pas la solution absolue pour l’utilisation d’une base de données et nous présente les avantages et inconvénients d’un ORM contre l’OMM.
Durant la conférence, on a pu voir la puissance de PostgreSQL, sa facilité d’exploitation couplé à PHP, et aussi que Pomm est adapté à Silex et Twig.
En revanche, il y a certaines limitations :
- Pomm reste résistant au changement,
- du code pouvant être difficile à maintenir,
- ou encore un schéma en base et donc pas de migrations PHP.
Bonnes pratiques pour Symfony2
Au travers de 42 bonnes pratiques, Tugdual Saunier, développeur chez SensioLabs, a (re)mis à plat les basiques à suivre et les pièges à éviter au sein d’un projet Symfony2 depuis son lancement jusqu’à son terme et sa maintenance. Durant cette conférence, Tugdual a listé de nombreux conseils et conventions de développement pour bien manipuler le framework et respecter sa philosophie.
Toutes ces recommandations améliorent l’efficacité et la qualité des développements et contribuent à la robustesse ainsi qu’aux performances finales d’un projet. Même pour ceux qui se sentent l’âme d’un ninja, il est bon de lire et mettre en application ces conventions PHP/Symfony2.
A bientôt au prochain Symfony Live !