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

modifier

Le 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

annotations.yaml

modifier

Remplacer les type: annotation par :

    type: attribute

framework.yml

modifier

Ajouter :

    handle_all_throwables: true
    annotations:
        enabled: false

security.yaml

modifier

Retirer enable_authenticator_manager.

.env et doctrine.yaml

modifier

Dans 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'.

Facultativement, 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').

Références

modifier