Retour sur le Symfony Live 2017

Symfony Live 2017

C’est avec l’édition 2017 du Symfony Live que nous entamons la saison des conférences printanières. Toujours dans l’enceinte de la Cité internationale universitaire de Paris, nous avons assisté à de beaux moments. Alors que Symfony 3 est sorti en fin d’année dernière, la version 4 est déjà au centre des discussions et c’est Fabien Potencier qui nous en parle lors de sa traditionnelle keynote.

Symfony 4

Nouvelle structure ✨

La version 3 avait déjà apporté des changements dans la structure Symfony, la version 4 continue avec l’introduction de nouveaux changements, plus orientés architecture UNIX (au niveau de l’arborescence du projet, des outils…) :

  • le répertoire etc/ accueillera désormais les fichiers de configuration (actuellement stockés dans app/config/ ;
  • l’apparition d’un fichier .env pour gérer les variables selon les environnements, le parameters.yml devient moins central ;
  • l’ajout d’un Makefile toujours dans l’optique de se rapprocher des standards UNIX.

Hello Symfony Flex 👋

Une des nouveautés marquante est l’introduction de Symfony Flex, permettant d’ajouter des bundles à votre projet Symfony sans aucune configuration. Aujourd’hui, nous utilisons la Symfony Standard Edition ayant pour dépendance symfony/symfony et donc l’ensemble des composants (formulaires, console, webserver). Symfony Flex s’appuie désormais sur le minimum vitale pour faire tourner Symfony, à savoir le template symfony/skeleton :

symfony/flex symfony/framework-bundle symfony/yaml

Si vous avez besoin de la console, des formulaires, vous pourrez les ajouter vous-même.

La notion d’héritage est donc remplacée par la notion de composition permettant une architecture plus flexible.

Symfony Flex fonctionne grâce à un plugin composer qui va permettre d’installer et configurer les bundles sans aucune configuration via des scripts de pré-installation. La nouveauté est la gestion de la configuration par bundle : un fichier par bundle donc, permettant d’ajouter et supprimer simplement un bundle sans avoir à parser un fichier config.yml par exemple. Plus besoin donc d’activer vos bundles dans le AppKernel, Symfony s’en occupe pour vous.

Symfony Flex apporte également le mécanisme d’alias et va suggérer des bundles de qualité, ainsi un simple composer require admin installera par exemple le bundle EasyAdmin.

La disparition des bundles par défaut 🙌

Confirmé par les bonnes pratiques de Symfony 2.8, la tendance est de limiter les bundles au sein de nos applications. Symfony 4 insiste dans cette logique : plus de AppBundle mais un fichier Kernel directement dans le répertoire src/.

Beaucoup de changements prévus donc pour cette nouvelle version de Symfony qui nécessitera PHP 7 \o/. Fabien Potencier a prévu de publier quelques articles à propos de cette nouvelle version, le premier est déjà sorti.

Le composant Serializer

Avec la release 2.7, le composant Serializer est devenu une alternative viable à la librairie JMSSerializer. Plus standard, plus simple et présent nativement dans Symfony, le composant s’impose désormais comme standard. Après une introduction du composant, Grégoire nous a livré des détails d’implémentation.

Le contexte de serialization ⚙

Selon vos endpoints, vous n’allez pas serializer vos données de la même manière, pour cela vous pouvez utiliser les groupes de serialization pour chaque ressource/action de votre API. Vous aurez ainsi une meilleure granularité sur les données de vos réponses.

$serializer->serialize($users, 'json', ['groups' => ['user_list']]);

Groupe

Le contexte permet également de gérer la profondeur de serialization grâce au flag enable_max_depth.

Enrichissement des ressources 💅

Pour enrichir et effectuer des traitements sur les données de vos ressources, il convient d’implémenter pour chaque entité un normalizer grâce à l’interface NormalizerInterface. Utilisez les méthodes supportsNormalization afin de vérifier le type de votre objet et normalize pour implémenter vos données.

Validation des données et serialization ✅

Afin de valider vos données, vous pouvez utiliser le composant de validation de Symfony, cependant la serialization de la réponse est verbeuse et peu pratique à exploiter côté client.

La bonne pratique est d’implémenter votre propre normalizer de l’objet ConstraintViolationListNormalizer. Voici un exemple d’implémentation issue d’API Platform Bundle.

On soulignera également, une petite astuce peu connue permettant de déserializer directement dans un objet :

$this->get('serializer')->deserialize(
    $data, 
    Post::class,
    'json',
    ['object_to_populate' => $post]
);

Retrouvez les slides de cette conférence sur le composant Serializer 🤓.

Les nouveautés de Symfony 3.3

Sarah a pris soin de nous résumer les dernières features de la version 3.3, à savoir :

  • Plus de SYMFONY_ pour les variables d’environnement mais %env()% ;
  • Mise à jour de la logique d’autowiring ;
  • Les noms de services sont désormais sensible à la casse ;
  • Accès facilité aux flash messages ;
  • Linter xliff ;
  • Recherche dans le contenu d’un dump() ;
  • Nouveau data collector cache ;
  • Implémentation de la PSR-16 ;
  • Webserver bundle ;
  • FQCN comme id de service ;
  • Nouveaux composants : Lock et Dotenv ;

Retrouvez le détail sur ses slides ou bien en parcourant les articles New in Symfony 3.3 du blog de Symfony.

Symfony, Webpack & React 🚀

Cette édition 2017 marque l’arrivée du Javascript au sein des discussions. Alain Hippolyte a introduit l’outil de build Webpack bien connu du monde Javascript. Ses slides expliquent les étapes pour brancher l’outil sur une stack Symfony afin de gérer ses assets efficacement et dire une bonne fois pour toute au revoir à Assetic.

Kevin Dunglas, core contributeur de Symfony, à quant à lui introduit deux nouveaux projets venant compléter son framework API Platform. Le premier api-platform/admin, permet de générer automatiquement une admin en React à partir d’une API supportant le format Hydra.

React

Le deuxième (api-platform/generate-crud) est un générateur de CRUD livrant aussi des formulaires en React à partir d’une spec (avec Redux / Redux-form en coulisse).

Des outils pertinents donc, qui vont nous permettre de scaffolder rapidement des bases d’interfaces en React. À noter que le support de React-Native doit être release d’ici quelques semaines. Vous pouvez retrouver ses slides ici.

Le mot de la fin

Ce fut donc une belle édition du Symfony Live avec de bonnes conférences, une mention spéciale pour la conférence « Qui veut gagner une carrière de développeur », un pastiche du jeu animé par l’équipe de Commit Strip qui nous a permis de rentrer jovialement dans la deuxième journée.

Enfin, bravo au groupe Kickban, qui nous a fait danser le jeudi soir avec leurs chansons geek 🎤 .

Kickban

Vous pouvez retrouver l’ensemble des slides des conférences sur Github. Bravo à toute l’équipe de Sensio et à l’année prochaine ! 🙋

blog comments powered by Disqus