Journal

Symfony 7 : les nouveautés concrètes à maîtriser

Journal du dimanche 23 août 2026, généré le 23 août à 19:37

Symfony 7 : les nouveautés concrètes à maîtriser

Symfony 7 ne bouleverse pas l'architecture héritée de la 6.4 LTS, mais il relève la barre : PHP 8.2 devient le minimum requis, tout le code marqué @deprecated depuis la 6.x a été supprimé, et plusieurs composants expérimentaux sortent enfin du statut bêta. Voici ce qui mérite vraiment votre attention.

Mapper les requêtes sans DTO manuel

Les attributs #[MapRequestPayload] et #[MapQueryParameter], stabilisés depuis la 6.3, sont désormais la façon idiomatique de désérialiser une requête directement dans un objet, avec validation automatique via les contraintes du composant Validator.

#[Route('/api/products', methods: ['POST'])]
public function create(
    #[MapRequestPayload] ProductInput $input,
): JsonResponse {
    // $input est déjà désérialisé et validé
    $product = $this->products->create($input);

    return $this->json($product, 201);
}

Fini le couple Serializer + Validator câblé manuellement dans chaque contrôleur : en cas d'échec, Symfony renvoie automatiquement une 422 avec le détail des violations.

Le composant Scheduler pour remplacer vos crons

Scheduler, désormais mûr, permet de définir des tâches périodiques en PHP plutôt que dans la crontab système, avec la même infrastructure que Messenger (transports, retries, verrous).

#[AsPeriodicTask(frequency: '1 hour')]
final class PurgeExpiredTokens
{
    public function __invoke(): void
    {
        $this->tokenRepository->deleteExpired();
    }
}

Les tâches deviennent testables, versionnées avec le code, et bénéficient du monitoring Messenger existant.

AssetMapper plutôt que Webpack Encore

AssetMapper s'impose comme l'option par défaut pour les projets qui n'ont pas besoin d'un bundler complet : import maps natifs du navigateur, aucun build Node.js, et compatibilité directe avec les Twig Components et Live Components de Symfony UX. Pour un SPA complexe avec React ou Vue, Webpack Encore reste pertinent, mais AssetMapper couvre désormais la majorité des cas Symfony-first.

Points à vérifier en migrant

  • Le composant Clock (ClockInterface) doit remplacer les appels directs à new DateTimeImmutable() dans le code métier, pour des tests déterministes.
  • Les contrôleurs invokables (__invoke()) simplifient les endpoints à responsabilité unique et évitent de nommer artificiellement une méthode.
  • HttpClient gère nativement les retries avec backoff exponentiel via RetryableHttpClient.
  • Le RateLimiter couvre désormais les stratégies sliding window en plus du token bucket, utile pour throttler des API publiques.

La migration 6.4 → 7.0 se résume souvent à corriger les appels aux classes dépréciées supprimées : lancez la suite de tests avec symfony_deprecations_helper avant de sauter le pas.