Si il y a bien une chose que j’ai appris récemment sur Symfony, c’est créer des commandes cli.
J’étais curieux de connaître la façon de faire.
J’ai commencé par lire la documentation du Framework, à l’adresse suivante : https://symfony.com/doc/current/console.html.
Cette documentation est assez compréhensible, même si elle est en anglais. Voici ce que j’en retire :
- Les fichiers commandes doivent obligatoirement être dans le dossier src/Command.
- La classe de votre commande doit forcément étendre la classe Command
- Une variable $defaultName doit contenir le nom de la commande
- Une classe commande contient 2 fonctions
- execute() : pour créer une commande
- configure(): Pour configurer une commande
Voici un exemple de commande :
<?php
namespace App\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class TimeCommand extends Command
{
protected static $defaultName = 'app:time';
protected function configure(): void
{
$this->setName('time')
->setDescription('Shows current date and time')
->setHelp('This command prints the current date and time');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$now = date('d/m/Y à H:i:s');
$message = sprintf("Cette commande a été lancé le : %s", $now);
$output->writeln($message);
return Command::SUCCESS;
}
}
Pour mon cas, comme j’utilise Symfony 5, il faut que j’enregistre cette commande dans le fichier services.yaml
services: App\Command\TimeCommand: tags: - { name: 'console.command', command: 'time' }
Au lancement de la commande, voici ce que cela donne :
Liens
Documentation Symfony : https://symfony.com/
Article sur Symfony : https://guillaume-richard.fr/category/developpement/symfony/