arrow_back

Tour d’horizon des nouveautés de Symfony 7.0

Marion Griesemann Responsable Éditoriale
Samuel Pierrat Développeur Back-end
Mathieu Pisonero CTO
18 Janvier 2024 • Lecture 4 min

Fidèle à sa roadmap (une sortie de version majeure tous les deux ans complétée de versions mineures tous les 6 mois), Symfony vient de faire coup double en publiant les releases 6.4 et 7.0 de son framework PHP, à date le plus utilisé à travers le monde. Ces deux versions sont quasi en tous points similaires à la différence que Symfony 6.4 prend encore en compte les dépréciations, ce qui peut laisser un peu de temps pour mettre à jour son code. Nos experts chez USERADGENTS vous conseillent toutefois de passer au plus vite sur la version 7.0 pour éviter de prendre du retard sur les migrations de versions car cela peut en effet vite devenir un “pain point” sur la maintenabilité de votre application. Concrètement, le plus pertinent est de mettre à niveau votre projet vers Symfony 6.4 pour bien vérifier toutes les fonctionnalités potentiellement obsolètes dans votre app, corriger ces dépréciations et ensuite passer à Symfony 7.0. 

Petit panorama des principales nouveautés, triées sur le volet par nos experts ! 

Amélioration du monitoring des commandes

On connait tous l’utilité du profiler, notre outil fétiche d’analyse pour identifier les bugs et optimiser notre code. Dorénavant, il sera également possible d’utiliser cet outil pour analyser les commandes custom que nous développons. Un vrai plus pour améliorer l’environnement de développement sous Symfony.

Intégration de Commands, Scripts… dans les Messages

L’amélioration de la gestion des sous-processus va permettre de segmenter et découpler les différentes Commands avec une grande simplicité. Grâce à un ensemble de Classes (RunProcessMessage, RunCommandMessage, PingWebhookMessage), il est dorénavant possible de lancer des scripts pour nettoyer un dossier recompilé des caches, sans interrompre l'exécution de la tâche en cours. Symfony va gérer automatiquement le stockage des différents messages dans une queue.

Prenons un exemple. Un service envoie des emails personnalisés chaque jour à une partie de ses utilisateurs. Le service a donc besoin de mettre à jour ces données toutes les nuits.

À n’importe quel moment de la Command, quand les données nécessaires au traitement des emails sont disponibles, il suffit d’envoyer un nouveau RunCommandMessage pour lancer le traitement des emails. Fini le séquençage manuel des tâches ! Plus besoin de prévoir une tâche à 1h du matin et l’autre à 2h : tout peut s'enchaîner sans aucune perte de temps.

Prise en charge des cookies CHIPS.

Avec cette nouvelle version, Symfony se conforme au standard porté principalement par Google et implémente donc la fonctionnalité de cookies partitionnés. 

cookie = new Cookie('cookie-name', 'cookie-value', '...', partitioned: true);
$cookie->withPartitioned();

C’est quoi les cookies CHIPS ?

Les cookies CHIPS (Cookies Having Independent Partitioned State) sont un nouveau système de cookies mis au point par Google, encore en phase expérimentale, qui ajoute une couche de sécurité pour les utilisateurs et favorise un meilleur respect de leur vie privée, puisqu’ils ne seront plus suivis sur plusieurs sites web lorsqu’ils utilisent des navigateurs comme Chrome, Edge ou Opera. En tant que développeur, cela veut dire que grâce à ce nouveau type de cookie, si votre site intègre des contenus extérieurs, les données ne seront plus partagées avec tous les autres sites qui intègrent eux-aussi ces mêmes contenus. Un bon moyen de rester conforme au Règlement Européen pour la Protection des Données (RGPD).  

Schéma du fonctionnement des cookies CHIPS de Google

Le fonctionnement est assez simple : les développeurs peuvent désormais enregistrer un cookie dans un espace de stockage “partitionné” et les fichiers de cookies seront donc totalement distincts par site. Sans ce partitionnement, les cookies tiers peuvent être partagés entre plusieurs sites alors qu’ils n’ont pas de rapport évident les uns avec les autres et participer au “suivi intersites”. 

Les cookies CHIPS devraient devenir dans les prochains mois une norme pour la plupart des navigateurs. Chez USERADGENTS, soyez sûrs que nous allons suivre ça de près !

De nouveaux tests unitaires

Les tests d’intégration peuvent parfois sembler rébarbatifs à écrire pour les développeurs… Cela tombe bien, Symfony 7.0 propose de simplifier leur écriture et leur manipulation.

$this->assertAnySelectorTextSame('ul li', 'test 3');
$this->assertAnySelectorTextContains('ul li', 'test');

Parmi les nouveaux tests les plus intéressants, on retrouve : 

  • Selector Html
    • assertAnySelectorTextSame : teste si un texte existe dans une sélection.
    • assertAnySelectorTextContains : teste si un texte est contenu dans une sélection.
  • HttpClient : 
    • assertHttpClientRequest : teste si une url a été appelée.
    • assertNotHttpClientRequest : teste si une url n’a pas été appelée.
    • assertHttpClientRequestCount : teste le nombre de fois que HttpClient a été utilisé.
  • Email : 
    • assertEmailSubjectContains : teste si un texte est contenu dans le sujet.
    • assertEmailSubjectNotContains : teste si un texte n’est pas contenu dans le sujet.

DatePoint : fini les erreurs de GMT 

Avec DatePoint, Symfony 7.0 permet d'intégrer plus simplement le composant Clock né avec la version 6.2, qui assure une meilleure gestion du temps entre les codes “PHP” et “Système” ainsi qu’une meilleure manipulation des formats date/time, avec des retours d’erreurs plus clairs.

Le Serializer se dote d’attributs au niveau de la classe

La sérialisation bénéficie dans cette nouvelle version de Symfony d’un lot d’améliorations et notamment la prise en charge des attributs au niveau de la classe. L’ajout des attributs Groups et Context au niveau de la classe permet de directement remonter toutes les propriétés d’une classe avec un formatage générique en fonction des types de propriétés.

On retrouve également aussi un TranslatableObject Normalizer qui va gérer la sérialisation des données à traduire. Pour info, rien de spécial à faire pour profiter de ce nouveau Normalizer, il suffit de passer (a minima) en Symfony 6.4.

Par ailleurs, les erreurs de sérialisation JSON peuvent être gérées beaucoup précisément, et c’est une amélioration que nous attendions beaucoup chez USERADGENTS… mais pas que ! Les erreurs lisibles seront indiquées (Parse error on line 1: {'foo': 'bar'} Invalid string, it appears you used single quotes instead of double quotes), plus besoin de les chercher dans le JSON. 

Une nouvelle mécanique pour l’usurpation d’identité 

Bien utile en phase de débug, Symfony permet maintenant de mettre en place une mécanique d’usurpation d’utilisateurs à la volée, pour passer d'un utilisateur à un autre sans avoir à se déconnecter et à se reconnecter. C’était le cas depuis la version 6.3 et la version 6.4 simplifie encore son utilisation, permettant de récupérer directement dans le “Twig” (moteur de template pour PHP) les URL nécessaires en cas d’usurpation d’identité. Attention donc à bien maîtriser cela dans vos environnements de production. 

Amélioration du système Security

Passons maintenant à des évolutions bienvenues dans le système d’authentification de Symfony : 

  • Le profiler affine désormais sa gestion des erreurs pour une meilleure identification des bugs. 
  • Les données logguées sont désormais cryptées via l’utilisation du composant login throttling pour éviter de potentielles fuites et surtout que n’importe qui puisse les lire.
  • Les patterns du security.yml prennent désormais en charge les arrays pour rendre leur écriture beaucoup plus simple et fluide (voir ci-dessous).

Avec ces nouvelles versions, Symfony démontre encore une fois sa capacité à innover et à faire avancer l'utilisation de ses différents composants. 

Passer vos projets sur Symfony 7.0, cela signifie : une meilleure flexibilité et une simplification significative de vos développements. Il devient plus facile de faire de l’asynchrone ou du découplage par exemple, ce qui améliore la performance globale de vos services et évite de surcharger vos utilisateurs finaux. Pour les développeurs, cela représente surtout beaucoup plus de tranquillité, par exemple avec la fonction DatePoint qui protège des casse-têtes de paramétrage de date / heure et surtout un gros gain de temps, comme le prouve la nouvelle logique d’attributs de classe qui permet d’exécuter des actions conjointement et plus une par une. 

Concrètement, Symfony 7.0 permet de faire des actions & fonctionnalités plus compliquées et a fortiori plus innovantes, beaucoup plus simplement. Notamment avec les nouveautés dans les Messages.

Samuel Pierrat, Développeur Symfony chez USERADGENTS 

Par ailleurs, l’un des points clés de cette nouvelle version de Symfony repose sur la facilitation des phases de débug qui, grâce à des évolutions comme la fluidification du process d’usurpation d’identité ou l’amélioration du profiler, permet d’effectuer une meilleure analyse de ses développements pour résoudre les problèmes plus rapidement. Enfin, Symfony, comme à chaque nouvelle version, continue d’améliorer sa sécurité et donc à terme la confidentialité de vos utilisateurs. 

Tout le reste des évolutions est à retrouver dans le changelog de la release (routes basées sur le FQCN, amélioration du service locator...) et si vous avez une question sur les nouvelles versions de Symfony ou un besoin d’accompagnement sur la prise en main du framework pour votre projet, contactez-nous !

Sur le même sujet

Étude : Pourquoi est-il urgent de refondre votre site en 2026 ?
10/06/2026

Étude : Pourquoi est-il urgent de refondre votre site en 2026 ?

Je découvre arrow_forward
Flutter 3.47 : le framework largue pour de bon Material et Cupertino
29/09/2026

Flutter 3.47 : le framework largue pour de bon Material et Cupertino

Je découvre arrow_forward
Pourquoi choisir Firebase AI Logic pour intégrer l'IA dans une app Android ?
29/06/2026

Pourquoi choisir Firebase AI Logic pour intégrer l'IA dans une app Android ?

Je découvre arrow_forward
DCM : comment booster la qualité du code de votre application Flutter ?
18/03/2026

DCM : comment booster la qualité du code de votre application Flutter ?

Je découvre arrow_forward
DreamFlow : du no-code à l’IA, le game changer est-il enfin là ?
25/02/2026

DreamFlow : du no-code à l’IA, le game changer est-il enfin là ?

Je découvre arrow_forward
De retour du Drupal AI Summit 2025 : on passe aux choses sérieuses !
23/12/2025

De retour du Drupal AI Summit 2025 : on passe aux choses sérieuses !

Je découvre arrow_forward
Cross-platform natif : illusion technologique ou futur du développement mobile ?
15/12/2025

Cross-platform natif : illusion technologique ou futur du développement mobile ?

Je découvre arrow_forward
Independence Day : les design systems Cupertino et Material seront bientôt découplés du cœur du framework de Flutter
27/10/2025

Independence Day : les design systems Cupertino et Material seront bientôt découplés du cœur du framework de Flutter

Je découvre arrow_forward
USERADGENTS crée un module Captchafox sur-mesure pour Drupal
02/01/2025

USERADGENTS crée un module Captchafox sur-mesure pour Drupal

Je découvre arrow_forward
Quelle solution choisir pour gérer de la donnée en temps réel ? Retour d’expérience sur le protocole Mercure
13/11/2024

Quelle solution choisir pour gérer de la donnée en temps réel ? Retour d’expérience sur le protocole Mercure

Je découvre arrow_forward
De retour de la Flutter Connection 2024 : ce qu’il fallait retenir pour les projets d’applications hybrides
13/05/2024

De retour de la Flutter Connection 2024 : ce qu’il fallait retenir pour les projets d’applications hybrides

Je découvre arrow_forward
expand_less