Où en est le support de Symfony 6.4 et 7.4 ?
| Critère | Symfony 6.4 | Symfony 7.4 |
|---|---|---|
| Sortie | novembre 2023 | novembre 2025 |
| Fin des correctifs de bugs | novembre 2026 | novembre 2028 |
| Fin des correctifs de sécurité | novembre 2027 | novembre 2029 |
| PHP minimum | 8.1 | 8.2 |
Statuts vérifiés le 08/11/2026 sur les pages officielles de version.
Les ruptures à traiter en premier
- Bloquant · 6.4L'intégration de doctrine/annotations est dépréciée : migrer routes, validation et serializer vers les attributs natifs, avant la suppression en 7.0.source
- Bloquant · 6.4Six défauts de config changent en 7.0 (http_method_override=false, handle_all_throwables=true, session.cookie_secure=auto, cookie_samesite=lax, UUID v7) : fixer les valeurs explicitement.source
Le chemin de migration, étape par étape
Chaque étape se termine sur une version sans dépréciation avant la majeure suivante : c’est la seule montée que la promesse de rétrocompatibilité de Symfony couvre. Avant de lancer le chantier, auditer la dette technique avec Bear Scan chiffre la dette qui ralentira chaque étape.
Côté outillage, Rector 2 ne s’appuie plus sur un set par version : withComposerBased(symfony: true) applique les règles de la version de Symfony installée, et withAttributesSets(symfony: true) convertit les annotations en attributs. On relance Rector après chaque montée de composer.json (configuration testée sur un passage vers Symfony 8).
Avant de quitter Symfony 6.4
PHP minimum : 8.1
- BloquantL'intégration de doctrine/annotations est dépréciée : migrer routes, validation et serializer vers les attributs natifs, avant la suppression en 7.0.source
- BloquantSix défauts de config changent en 7.0 (http_method_override=false, handle_all_throwables=true, session.cookie_secure=auto, cookie_samesite=lax, UUID v7) : fixer les valeurs explicitement.source
- À traiterContainerAwareInterface et ContainerAwareTrait sont dépréciés : injecter les dépendances plutôt que le conteneur.source
- À traiterHeaderBag::getDate() et Response::getDate(), getExpires(), getLastModified() renvoient désormais un DateTimeImmutable (rupture de compatibilité).source
- À traiterLes services routing.loader.annotation* et AnnotatedRouteControllerLoader sont dépréciés au profit des équivalents attribute.source
- MineurDbalLogger et ContainerAwareLoader (fixtures) sont dépréciés : passer par un middleware DBAL et l'injection de dépendances.source
Pièges rencontrés en migration
- Le défaut de framework.http_method_override passe à false en 7.0 : les formulaires envoyant _method=PUT/DELETE cessent de fonctionner sans activation explicite.source
- Des return types natifs sont ajoutés à de nombreuses méthodes (Translator, Application::reset(), Logger::clear()) : les classes qui les surchargent doivent déclarer le type.source
- 6.4 est la version de préparation à la 7.0 : la 7.0 contient les mêmes fonctionnalités sans code déprécié, il faut donc résoudre toutes les dépréciations de la 6.4 avant de monter.source
Symfony 7 (7.0, 7.1, 7.2, 7.3 et 7.4)
PHP minimum : 8.2
- Bloquant · 7.0L'intégration de doctrine/annotations est supprimée : routes, validation et serializer n'acceptent plus que les attributs PHP natifs.source
- Bloquant · 7.0Les options framework.validation.enable_annotations et serializer.enable_annotations disparaissent, remplacées par enable_attributes.source
- Bloquant · 7.0Command::$defaultName/$defaultDescription et ContainerAwareInterface/Trait sont supprimés : #[AsCommand] et injection de dépendances obligatoires.source
- Bloquant · 7.0MessageHandlerInterface et MessageSubscriberInterface sont retirés : tous les handlers Messenger doivent utiliser #[AsMessageHandler].source
- Bloquant · 7.3UserInterface::eraseCredentials() et TokenInterface::eraseCredentials() sont dépréciés : vider les secrets dans __serialize().source
- Bloquant · 7.4Le format de configuration XML est déprécié pour le conteneur et la validation : migrer vers YAML, PHP ou attributs avant la 8.0.source
Pièges rencontrés en migration
- PHP 8.2 devient le minimum : planifier la montée PHP (et Docker/CI) avant le passage en 7.0, qui est la vraie condition de blocage sur les hébergements anciens.source
- Symfony 7.0 ne lit plus les annotations (@Route, @Assert…) : routes et contraintes doivent être déclarées en attributs PHP (#[Route], #[Assert\NotBlank]) avant la montée.source
- Les nouveaux types natifs cassent les classes qui surchargent des méthodes Symfony sans return type : appliquer le patcher de types avant la montée.source
À lire sur le blog : De Symfony 7.4 LTS à la branche 8.x : éliminer les dépréciations proprement · Symfony 7.4 LTS : ce qu'il faut savoir avant de migrer
Ce que Symfony 7.4 vous apporte
- 7.0 : 7.0 expose les mêmes fonctionnalités que la 6.4 mais sans aucun code déprécié : plus léger et plus strict.source
- 7.1 : Nouveau composant TypeInfo qui extrait les types PHP depuis propriétés, méthodes et retours de fonctions via plusieurs sources.source
- 7.2 : Attribut #[AsMessage] pour configurer le ou les transports directement dans la classe du message Messenger.source
- 7.3 : Commandes invocables avec attributs d'entrée (#[Argument], #[Option]) pour décrire arguments et options dans la signature de __invoke().source
- 7.4 : Formulaires multi-étapes (form flows) construits avec les concepts habituels de Symfony Form.source
Combien coûte cette migration ?
Petite application
100 fichiers PHP, 15 entités, 2 bundles maison
4 440 € HT
Application métier
400 fichiers PHP, 60 entités, 6 bundles maison
17 420 € HT
Plateforme
1 200 fichiers PHP, 150 entités, 15 bundles maison
59 970 € HT
Exemples de la grille Bear Upgrade pour Symfony 6 → 7 (tests à 20 %, sans PHPStan ni CI), pas des devis : le prix ferme est fixé au cadrage.
Pour la migration accompagnée Bear Upgrade, Rector tourne d’abord en dry-run sur les transformations mécaniques, Claude Code traite les cas que Rector ne couvre pas, puis un développeur senior relit chaque Merge Request. Votre équipe veut reprendre la main ensuite ? Pensez à former votre équipe à Claude Code. Exemple concret : la migration Symfony d’un e-commerce bordelais, et après la migration, la maintenance des versions garde le socle à jour.
Questions fréquentes
Oui : une fois les dépréciations de Symfony 6.4 corrigées, le passage à Symfony 7.4 se fait sans réécriture, en mettant à jour composer.json et la configuration.
Symfony 7.4 exige PHP 8.2 au minimum, contre PHP 8.1 pour Symfony 6.4. La montée de PHP fait partie du chemin et se prépare avec Rector.
Sur la grille Bear Upgrade, une petite application revient à 4 440 € HT, une application métier à 17 420 € HT et une plateforme à 59 970 € HT (tests à 20 %, sans PHPStan ni CI). Le prix ferme est fixé au cadrage, après lecture du code.
Symfony 6.4 reste couvert par les correctifs de sécurité jusqu’en novembre 2027 (fin des correctifs de bugs : novembre 2026).
Pour aller plus loin
- De Symfony 7.4 LTS à la branche 8.x : éliminer les dépréciations proprement
- Symfony 7.4 LTS : ce qu'il faut savoir avant de migrer
- Symfony 7.3 ObjectMapper : le mapping DTO enfin natif
- Symfony 7.3 : ObjectMapper, JsonStreamer et SSE natifs
- OpenTelemetry + Symfony 7.2 : traces, métriques, logs sans overhead