Skip to Content
SymfonyPartie 16 — Annexes16.6 — Migration Symfony 5 → 7

16.6 — Migration Symfony 5 → 7

Guide pour un développeur qui connaissait Symfony 5 et retrouve le framework en 7.4. « Qu’est-ce qui a changé ? »

La stratégie : d’LTS en LTS

On ne saute pas directement de 5.x à 7.4. On migre une majeure à la fois, en s’appuyant sur les LTS :

À chaque étape : (1) éliminer toutes les dépréciations sur la version actuelle (le profiler/les tests les listent), (2) monter à la majeure suivante (le code déprécié y est supprimé, mais vous ne l’utilisez plus). Cf. 1.2.

Outil clé : Rector (sets Symfony + PHP) automatise l’essentiel des transformations. Cf. 14.6.

Ce qui a le plus changé depuis Symfony 5

DomaineSymfony 5 (ancien)Symfony 7.4 (actuel)
Configurationannotations @Route, @ORM\Column dans des commentairesattributs #[Route], #[ORM\Column]
Dépendance annotationsdoctrine/annotations requisnatif (attributs PHP)
Sécuritéancien système + anonymous: true, Guard authenticatorsauthenticators (Passport), plus d’anonymous
Squelettewebsite-skeletonskeleton + --webapp / packs
ParamConverter@ParamConverter (SensioFrameworkExtraBundle)#[MapEntity] (natif)
FrontWebpack Encore (node_modules, build)AssetMapper (sans build) par défaut
DoctrineORM 2, annotations/YAMLORM 3, attributs, DBAL 4
API Platform2.x, DataProvider/Persister3/4, State Provider/Processor, opérations en attributs
Requête → argumentsParamConverterValue Resolvers (#[MapRequestPayload], #[MapQueryString])
BundlesExtension + Configuration verbeuxAbstractBundle (concis)
MessengerMessageHandlerInterfaceattribut #[AsMessageHandler]
Commandes$defaultName statiqueattribut #[AsCommand]
PHP minimum7.2 (5.4)8.2 (toute la 7.x)

Le plus grand choc visuel

Vos souvenirs de Symfony 5 sont probablement remplis de commentaires :

// Symfony 5 /** * @Route("/bookings/{id}", name="booking_show") * @ORM\Column(type="string", length=255) */

En 7.4, tout est en attributs natifs :

// Symfony 7.4 #[Route('/bookings/{id}', name: 'booking_show')] #[ORM\Column(length: 255)]

C’est le changement à intégrer en priorité : votre œil doit passer de @ (commentaires) à #[...] (langage). Rector fait la conversion automatiquement (AnnotationToAttributeRector).

Checklist de migration (par étape de majeure)

  1. Être à jour dans la mineure actuelle (ex. dernière 5.4).
  2. composer : lister les dépréciations (profiler, tests avec le pont Symfony).
  3. Éliminer toutes les dépréciations (messages « utilisez Y au lieu de X »).
  4. Lancer Rector (set de la majeure cible) sur un dépôt propre, --dry-run puis relire.
  5. Monter la contrainte symfony/* d’un cran majeur dans composer.json, composer update.
  6. Corriger ce qui reste, lancer les tests, vérifier le profiler.
  7. Committer. Recommencer pour la majeure suivante.

Ce qui n’a PAS changé (rassurant)

  • La structure (src/, config/, templates/, public/) et le pipeline requête→réponse.
  • Le conteneur de services / autowiring / injection par constructeur.
  • Twig, Doctrine (les concepts), le routing (par nom).
  • La promesse de rétrocompatibilité : à l’intérieur d’une majeure, rien ne casse.

Vos fondamentaux Symfony 5 sont toujours valides ; c’est surtout la syntaxe de configuration (annotations → attributs) et quelques sous-systèmes (sécurité, front) qui ont évolué.


Suivant : 16.7 — Ressources.