Où en est le support de Symfony 3.4 et 4.4 ?
| Critère | Symfony 3.4 | Symfony 4.4 |
|---|---|---|
| Sortie | novembre 2017 | novembre 2019 |
| Fin des correctifs de bugs | novembre 2020 | novembre 2022 |
| Fin des correctifs de sécurité | novembre 2021 | novembre 2023 |
| PHP minimum | 5.5.9 | 7.1.3 |
Statuts vérifiés le 08/11/2026 sur les pages officielles de version.
Les ruptures à traiter en premier
- Bloquant · 3.4Services et alias seront privés par défaut en 4.0 : ne plus appeler $container->get() ; injecter les dépendances ou marquer public: true.source
- Bloquant · 3.4L'auto-enregistrement de services lié à l'autowiring est déprécié : déclarer explicitement les services, ids égaux aux FQCN.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, un audit Bear Scan avant de migrer 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 3.4
PHP minimum : 5.5.9
- BloquantServices et alias seront privés par défaut en 4.0 : ne plus appeler $container->get() ; injecter les dépendances ou marquer public: true.source
- BloquantL'auto-enregistrement de services lié à l'autowiring est déprécié : déclarer explicitement les services, ids égaux aux FQCN.source
- À traiterNe pas fixer strict=true sur la contrainte Choice est déprécié : l'ajouter partout où la contrainte est utilisée.source
- À traiterYaml::PARSE_KEYS_AS_STRINGS est déprécié : mettre entre guillemets les clés numériques et booléennes dans les fichiers YAML.source
- MineurLes syntaxes !php/object: et !php/const: avec deux-points sont dépréciées au profit de !php/object et !php/const.source
- MineurLa classe ProcessBuilder est dépréciée : instancier directement Process avec un tableau d'arguments.source
Pièges rencontrés en migration
- La 3.4 est le palier obligé avant 4.0 : activer le logging des dépréciations et les traiter toutes sur cette version, puisqu'elles deviennent des erreurs en 4.0.source
- Les contrôleurs et commandes qui récupèrent leurs services via le conteneur (container->get) casseront au passage en 4.0 : les convertir en injection par constructeur.source
Symfony 4 (4.0, 4.1, 4.2, 4.3 et 4.4)
PHP minimum : 7.1.3
- Bloquant · 4.0Les services sont privés par défaut : Container::get() sur un service privé n'est plus supporté.source
- Bloquant · 4.0L'autowiring par type implémenté est supprimé : il faut un alias ou un id de service égal au FQCN.source
- Bloquant · 4.0La découverte des commandes par convention (Command/ dans les bundles) est supprimée : les enregistrer comme services tagués.source
- Bloquant · 4.1Les syntaxes de contrôleur bundle:controller:action et service:action sont dépréciées : utiliser serviceOrFqcn::method.source
- Bloquant · 4.2La classe Controller de FrameworkBundle est dépréciée : étendre AbstractController (services non accessibles via le conteneur).source
- Bloquant · 4.3La signature d'EventDispatcherInterface::dispatch() s'inverse : dispatch($event, $eventName) au lieu de dispatch($eventName, $event).source
Pièges rencontrés en migration
- Adopter Symfony Flex impose de déplacer app/, web/ et var/ vers la nouvelle structure (config/, public/, templates/) ; la recette de migration est la partie la plus longue du passage.source
- Les clés YAML non chaînes (true:, null:) sont rejetées : auditer les fichiers de configuration.source
- Les références de contrôleurs à l'ancienne (AppBundle:Default:index) dans routing.yml et les annotations sont à convertir en FQCN avant la 5.0.source
Ce que Symfony 4.4 vous apporte
- 4.0 : Flex et la nouvelle arborescence : app/config/ devient config/, web/ devient public/, web/app.php devient public/index.php.source
- 4.1 : Le composant Messenger fait son apparition, avec la commande debug:messenger et MessageHandlerInterface.source
- 4.2 : Le composant VarExporter sérialise des objets en code PHP, et symfony/contracts apparaît.source
- 4.3 : Les composants HttpClient, Mailer et Mime arrivent, encore expérimentaux.source
- 4.4 : Les commandes secrets:* gèrent les secrets chiffrés dans le dépôt, avec un trousseau par environnement.source
Combien coûte cette migration ?
Petite application
100 fichiers PHP, 15 entités, 2 bundles maison
5 150 € HT
Application métier
400 fichiers PHP, 60 entités, 6 bundles maison
20 260 € HT
Plateforme
1 200 fichiers PHP, 150 entités, 15 bundles maison
70 210 € HT
Exemples de la grille Bear Upgrade pour Symfony 3 → 4 (tests à 20 %, sans PHPStan ni CI), pas des devis : le prix ferme est fixé au cadrage.
Pour confier la migration à 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 à la formation Claude Code sur vos projets. Exemple concret : la migration Symfony d’un e-commerce bordelais, et après la migration, la maintenance des versions garde le socle à jour.
Sur une base aussi ancienne, l’audit d’abord : Bear Scan mesure tests, dépendances abandonnées et code mort avant de fixer le prix de la migration.
Questions fréquentes
Oui : une fois les dépréciations de Symfony 3.4 corrigées, le passage à Symfony 4.4 se fait sans réécriture, en mettant à jour composer.json et la configuration.
Symfony 4.4 exige PHP 7.1.3 au minimum, contre PHP 5.5.9 pour Symfony 3.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 à 5 150 € HT, une application métier à 20 260 € HT et une plateforme à 70 210 € HT (tests à 20 %, sans PHPStan ni CI). Le prix ferme est fixé au cadrage, après lecture du code.
Symfony 3.4 ne reçoit plus de correctifs de sécurité depuis novembre 2021 (fin des correctifs de bugs : novembre 2020).
Pour aller plus loin
Sources
- raw.githubusercontent.com/symfony/symfony/3.4/UPGRADE-3.4.md
- raw.githubusercontent.com/symfony/symfony/4.0/UPGRADE-4.0.md
- raw.githubusercontent.com/symfony/symfony/4.1/UPGRADE-4.1.md
- raw.githubusercontent.com/symfony/symfony/4.2/UPGRADE-4.2.md
- raw.githubusercontent.com/symfony/symfony/4.3/UPGRADE-4.3.md