Symfony 7.4 : Le guide ultime des commandes invocables modernes

DEV - 30/12
L'évolution du composant Symfony Console a été un voyage de raffinement constant. Pour...

L'évolution du composant Symfony Console a été un voyage de raffinement constant. Pendant des années, les développeurs se sont habitués au rituel consistant à étendre la classe Command, à implémenter la méthode configure() pour définir les arguments et les options et à placer leur logique dans exécuté(). C’était robuste, déterministe et verbeux.

Avec l'avènement de Symfony 5 et 6, nous avons assisté à l'introduction des commandes invokables, un changement de paradigme qui nous a permis de traiter davantage les commandes comme des contrôleurs. La méthode __invoke() est devenue le nouveau point d'entrée et le passe-partout de configure() a commencé à s'estomper, remplacé partiellement par des attributs PHP comme #[AsCommand]. Cependant, un point de friction subsistait : la déconnexion entre la signature de la commande et l’analyse réelle des entrées. Nous nous retrouvions toujours à récupérer manuellement les arguments via $input->getArgument('…') ou à nous appuyer sur des configurations complexes pour mapper les entrées aux variables saisies.

Symfony 7.4 change tout

Sorti en novembre 2025, Symfony 7.4 introduit une suite d'améliorations de qualité de vie pour le composant Console qui comble efficacement le fossé entre les commandes de console et les contrôleurs HTTP. Avec la prise en charge native des énumérations sauvegardées, des DTO d'entrée via #[MapInput] et de l'interactivité déclarative avec #[Interact] et #[Ask], l'écriture d'outils CLI n'a jamais été aussi sûre ou expressive.

Dans ce guide complet, nous explorerons ces nouvelles fonctionnalités en profondeur. Nous allons refactoriser une commande héritée en un chef-d'œuvre Symfony 7.4 moderne, couvrant l'installation, la mise en œuvre, la vérification et les tests.

Conditions préalables et installation

Avant de plonger dans le code, assurez-vous que votre environnement est prêt. Vous aurez besoin de :

  1. PHP 8.2 ou supérieur (PHP 8.4 recommandé pour une meilleure prise en charge de la syntaxe).
  2. Compositeur installé globalement.

Pour suivre les exemples, il est nécessaire de créer un nouveau projet Symfony 7.4 ou de mettre à niveau un projet existant.

Si vous repartez à zéro :

composer create-project symfony/skeleton :^7.4 my_cli_app cd my_cli_app composer require symfony/console :^7.4
Entrer en mode plein écran Quitter le mode plein écran

Si vous mettez à niveau un projet existant, assurez-vous que votre composer.json cible explicitement la version 7.4 pour le composant console :

{ "require": { "php": ">=8.2", "symfony/console": "^7.4", "symfony/framework-bundle": "^7.4", "symfony/runtime": "^7.4" } }
Entrer en mode plein écran Quitter le mode plein écran

Exécutez la commande de mise à jour :

compositeur mise à jour symfony/*
Entrer en mode plein écran Quitter le mode plein écran

Vérifiez votre version :

php bin/console --version # Le résultat devrait ressembler à : Symfony 7.4.x (env : dev, debug : true)
Entrer en mode plein écran Quitter le mode plein écran

Prise en charge native de l'énumération

L'ancienne méthode (pré-7.4)

Auparavant, la gestion des valeurs énumérées dans les commandes était un processus manuel. Vous accepteriez un argument de chaîne, le valideriez manuellement par rapport à une liste de valeurs autor...
[Courte citation de 8% de l'article original]

Loading...