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.
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.
Avant de plonger dans le code, assurez-vous que votre environnement est prêt. Vous aurez besoin de :
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.4Si 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" } }Exécutez la commande de mise à jour :
compositeur mise à jour symfony/*Vérifiez votre version :
php bin/console --version # Le résultat devrait ressembler à : Symfony 7.4.x (env : dev, debug : true)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]