DND - Symfony 6 - Banner

par Tommy, Développeur back-end Symfony à l’Agence Dn’D 

Sortie en même temps que la version 5.4 LTS qui embarque avec elle un grand nombre de nouveautés, la version 6 de Symfony se débarrasse, quant à elle, du code déprécié dans la version 5. Parmi les faits marquants de Symfony 6, il est important de noter que la version minimale de PHP est désormais la 8.0.

Quelles sont les nouveautés de cette version 6.0 ? Comment migrer son application Symfony 5 en 6 ? Découvrons tout cela plus en détails à travers cet article !

Les nouveautés majeures de Symfony 6

Comme d’habitude, il est possible de consulter une liste exhaustive et détaillée des nouveautés sur le blog de Symfony. Nous avons fait une petite sélection de nos préférées :

Typage

Ça y est, Symfony a typé l’ensemble de son code ! Ce travail de titan en améliore la robustesse et encouragera tous ses utilisateurs à en faire de même sur leur propre code. Si ce n’est pas déjà le cas dans vos projets, les différentes méthodes à suivre sont documentées dans la partie guide de migration.

Conditional Profiling

Afin de limiter l’impact sur les performances, il est désormais possible de contraindre la collecte d’informations de débogage à certaines requêtes.

DND - Conditional Profiling

Cette configuration restreint la collecte aux requêtes contenant le paramètre ‘profile’. Vous pouvez retrouver plus de détails à ce sujet en consultant la documentation officielle de la technologie : documentation officielle

Les nouveautés liées à PHP 8.1 

DND - PHP 8.1

Énumérations

Nativement, PHP permet de gérer directement des objets de type Enum. Désormais complètement intégré dans Symfony, cela vous permettra d’utiliser vos Enum pour vos Forms, Serializers, ou tout autre cas de figure où plusieurs valeurs sont envisageables.

Attributs de validation imbriqués

Il s’agissait de LA grosse nouveauté de la version 5.2. Les annotations, assez répandues dans Symfony, peuvent depuis être remplacées par des attributs PHP pour définir des métadonnées. Cependant un cas de figure rendait les attributs moins souples que les annotations : PHP 8.0 ne supportait pas les imbrications d’attributs, ce qui les rendait inutilisables pour les constraints de type AtLeastOneOf ou Collection. C’est maintenant possible, grâce au support natif des nested attributes dans PHP 8.1 ! Pour en savoir plus à ce sujet, n’hésitez pas à vous rendre sur le blog de Symfony.

DND-Symfony 6 - MEME

Configuration

Il est désormais possible de définir un niveau de log pour chaque type d’exception, afin d’avoir une gestion fine de ce qui est logué selon l’environnement.

DND - Symfony 6 - Configuration

Filesystem Path class

L’illustre Filesystem component symfony/filesystem s’enrichit d’une classe utilitaire pour manipuler les chemins de fichiers plus aisément : Path (ouvertement importée du path-util de webmozart). 

Voici quelques exemples d’utilisations :

DND - Symfony 6 - Path

Changement dans les contrôleurs

Une fois n’est pas coutume, les controllers évoluent et de nouvelles dépréciations ont été introduites

Il est désormais déprécié de :

  • Utiliser les shortcuts suivants:
    • get()et has()
    • dispatchMessage()
    • getDoctrine()
  • Utiliser Request::get()

Afin de mieux maîtriser la provenance de la donnée, Symfony préconise en effet l’objet $request pour accéder à ses différentes propriétés :

DND - Symfony 6 - contrôleurs

Console autocompletion

Comme montré dans le GIF ci-dessous, la touche tab permet désormais l’autocomplétion des commandes Symfony.

DND - Symfony 6 - Autocompletion

Language negotiation

Support de l’entête HTTP Accept-Language : une nouvelle configuration permet d’utiliser cette entête pour setter la locale de la requête (qui est ensuite accessible via $request->getLocale();). Il est important de noter que cette configuration est ignorée si la route définit sa propre locale.

Messenger improvements

La gestion des message queue reçoit de multiples améliorations, parmi lesquelles la gestion de messages par batchs, la possibilité de reset le conteneur de services entre les différents messages et le support de la metadata AsMessageHandler pour configurer un message handler via des attributs PHP, plutôt que d’implémenter MessageHandlerInterface.

Comment préparer sa migration vers Symfony 6 ?

Sur le papier rien de plus simple (enfin, surtout pour les bons élèves qui ne traînent pas des tonnes de notices de dépréciation et dont la code base est déjà fortement typée) :

  1. Migrer sous PHP 8.1,
  2. Résoudre les dépréciations en suivant les consignes levées dans les notices,
  3. Typer tout le code pour assurer la compatibilité. Pour cela, trois solutions s’offrent à vous : à la main, utiliser l’outil de mise à jour de symfony  et avec des outils de refactoring comme Rector PHP.
  4. Finaliser ce processus de migration et profiter des performances obtenues !

DND - Symfony 6 - Conclusion

Conclusion

Faut-il migrer vers Symfony 6 ? La réponse est bien entendu OUI, car cela pourra vous permettre de bénéficier d’un certain nombre d’avantages intéressants : 

  • Optimiser ses chances d’éviter toutes failles de sécurité.
  • Profiter d’une base moderne et actualisée.
  • Rétrocompatibilité : comme d’habitude, la promesse de rétrocompatibilité est tenue, et le code typé qui ne lève pas de notices en 5.x fonctionnera très bien dans la nouvelle version.
  • Profiter d’améliorations de performances et des nouveautés liées à cette nouvelle version.

Bien entendu, il est toujours profitable de suivre les montées en version de manière incrémentale, plutôt que d’attendre plusieurs versions majeures, l’effort à fournir étant largement moindre.

Vous avez un projet de développement E-Commerce ? 

Spécialisé dans le E-Commerce, Dn’D accorde une attention particulière aux meilleures pratiques de développement technologique. Grâce à nos équipes certifiées sur des solutions reconnues telles que Magento ou encore OroCommerce, nous vous accompagnons dans le conseil, la conception, la maintenance de vos sites E-Commerce B2C et B2B. N’hésitez pas à nous contacter ! 

Vous avez aimé ?

0