Créer une commande
Les commandes personnalisées permettent d'automatiser des tâches récurrentes,d'effectuer des opérations de maintenance ou d'interagir avec votre application depuis le terminal.
Création d'une commande
Pour créer une nouvelle commande, utilisez la commande suivante :
php dobby make:command MonNomDeCommande
Cette commande générera un nouveau fichier dans app/Commands/ avec la structure de base.
Structure de base d'une commande
Voici la structure complète d'une commande avec un exemple concret :
app/Commands/HelloWorldCommand.php
<?php namespace App\Commands; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class HelloWorldCommand extends Command { protected static $defaultName = 'hello:world'; public function __construct() { parent::__construct(self::$defaultName); } protected function configure() { $this ->setDescription('Dit bonjour à la personne') ->addArgument('name', InputArgument::REQUIRED, 'Prénom et nom') ->addArgument('age', InputArgument::OPTIONAL, 'Age') ; } protected function execute(InputInterface $input, OutputInterface $output): int { $name = $input->getArgument('name'); $age = $input->getArgument('age'); if ($age) { $output->writeln("<info>Bonjour $name, vous avez $age ans</info>"); } else { $output->writeln("<info>Bonjour $name</info>"); } $output->writeln("<comment>Commande terminée</comment>"); return Command::SUCCESS; } }
Explication des parties importantes :
- $defaultName : Nom de la commande à utiliser dans le terminal
- __construct() : Initialise la commande avec son nom
- configure() : Configure la description et les arguments de la commande
- execute() : Contient la logique métier de la commande
Structure détaillée de la commande
Propriétés
| Propriété | Description |
|---|---|
$defaultName | Définit le nom de la commande utilisé dans le terminal (ex: hello:world) |
Méthodes principales
1. __construct()
Le constructeur initialise la commande avec son nom :
public function __construct() { parent::__construct(self::$defaultName); }
2. configure()
Définit la configuration de la commande :
- Description
- Arguments requis/optionnels
- Options
- Aide
protected function configure() { $this ->setDescription('Dit bonjour à la personne') ->addArgument('name', InputArgument::REQUIRED, 'Prénom et nom') ->addArgument('age', InputArgument::OPTIONAL, 'Age') ; }
3. execute()
Contient la logique métier de la commande :
protected function execute(InputInterface $input, OutputInterface $output): int { // Récupération des arguments $name = $input->getArgument('name'); $age = $input->getArgument('age'); // Logique métier if ($age) { $output->writeln("<info>Bonjour $name, vous avez $age ans</info>"); } else { $output->writeln("<info>Bonjour $name</info>"); } // Message de fin $output->writeln("<comment>Commande terminée</comment>"); // Code de retour : SUCCESS (0) ou FAILURE (1) return Command::SUCCESS; }
Exemples pratiques
Commande avec confirmation
use Symfony\Component\Console\Question\ConfirmationQuestion; // ... protected function execute(InputInterface $input, OutputInterface $output): int { $helper = $this->getHelper('question'); $question = new ConfirmationQuestion('Voulez-vous continuer ? (y/N) ', false); if (!$helper->ask($input, $output, $question)) { return Command::SUCCESS; } // Suite du traitement... }
Commande avec tableau de données
use Symfony\Component\Console\Helper\Table; // ... protected function execute(InputInterface $input, OutputInterface $output): int { $table = new Table($output); $table ->setHeaders(['ID', 'Nom', 'Email']) ->setRows([ [1, 'John Doe', 'john@example.com'], [2, 'Jane Smith', 'jane@example.com'], ]); $table->render(); return Command::SUCCESS; }
Bonnes pratiques
- Nommage : Utilisez un préfixe (ex:
app:) pour vos commandes personnalisées - Documentation : Documentez les arguments et options dans la méthode
configure() - Codes de retour : Utilisez les constantes
Command::SUCCESSetCommand::FAILURE
Exécution des commandes
Liste toutes les commandes disponibles :
php dobby help
Documentation complète
Pour plus d'informations, consultez la documentation officielle de Symfony Console.