Programmation PHP avec Symfony/Migration de Symfony 6 à 7
La liste des dépréciations cassantes en Symfony 7 est disponible dans le Profiler d'un projet Symfony 6.4, à la section logs[1].
Il faut donc procéder aux remplacements ci-dessous avant de lancer la migration proprement dite, qui consiste à rechercher / remplacer dans composer.json, les "6.4.*" par "7.2.*", puis en lançant :
composer update "symfony/*" --with-all-dependencies
composer.json
modifierLe composant suivant est abandonné depuis Symfony 6.4[2] :
composer remove symfony/proxy-manager-bridge -W
Mettre à jour symfony/webpack-encore-bundle
en V2 minimum. Selon si c'est utilisé dans le code, cette migration nécessite maintenant d'ajouter :
composer require symfony/stimulus-bundle
config
modifierannotations.yaml
modifierRemplacer les type: annotation
par :
type: attribute
framework.yml
modifierAjouter :
handle_all_throwables: true annotations: enabled: false
security.yaml
modifierRetirer enable_authenticator_manager
.
.env et doctrine.yaml
modifierDans le .env, ajouter les query params en suffixes des DSN :
?serverVersion=8.0.32&charset=utf8mb4
Et retirer ces valeurs de doctrine.yaml : server_version: '8.0.35'
.
Rector
modifierFacultativement, on peut utiliser Rector pour convertir automatiquement vers les nouvelles syntaxes.
Installation :
composer require rector/rector --dev vendor/bin/rector init
Ensuite, il suffit de mettre les règles voulues dans rector.php :
$rectorConfig->sets([ LevelSetList::UP_TO_PHP_83, SymfonySetList::SYMFONY_72, SymfonySetList::SYMFONY_CODE_QUALITY, SymfonySetList::SYMFONY_CONSTRUCTOR_INJECTION, SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES, DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES, ]);
Puis lancer la modification des fichiers :
vendor/bin/rector process src
Rector est susceptible de déplacer les attributs #[Route(path: '/xxx', name: 'xxx_')]
de classes dans chacune de leurs méthodes, sans ajouter en préfixes des noms de leurs routes, la valeur du paramètre "name". Ce qui plante leurs appels par nom.
Par exemple en Twig, avec Modèle:Path('xxx maRoute')
.