Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
symfony5:console_creer_ses_commandes [2020/05/31 08:59] marclebrun [Lister les commandes existantes] |
— (Version actuelle) | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Créer ses propres commandes console ====== | ||
- | |||
- | Créer des commandes console permettra, entre autres choses, d'appeler une | ||
- | fonction du site à intervalle régulier via une tâche **cron**. | ||
- | |||
- | * Doc officielle: [[https://symfony.com/doc/current/console.html]] | ||
- | * Exemple (ancienne version !) : [[https://www.babeuloula.fr/blog/creer-une-tache-cron-sous-symfony.html]] | ||
- | |||
- | ===== Lister les commandes existantes ===== | ||
- | |||
- | <code bash> | ||
- | php bin/console list | ||
- | </code> | ||
- | |||
- | Les commandes personnelles apparaissent dans cette liste : | ||
- | |||
- | <code> | ||
- | Available commands: | ||
- | |||
- | ... | ||
- | |||
- | app | ||
- | app:sendtestemail Envoi d'un email pour test | ||
- | app:sendzippedfolder Envoyer le contenu d'un dossier par email (zippé) | ||
- | app:test Commande console de test. | ||
- | |||
- | ... | ||
- | </code> | ||
- | |||
- | ===== Exemple simple (affichage d'un texte) ===== | ||
- | |||
- | <code php /src/command/CommandeTest.php> | ||
- | namespace App\Command; | ||
- | |||
- | use Symfony\Component\Console\Command\Command; | ||
- | use Symfony\Component\Console\Input\InputInterface; | ||
- | use Symfony\Component\Console\Output\OutputInterface; | ||
- | |||
- | class CommandeTest extends Command { | ||
- | |||
- | // Nom de la commande | ||
- | protected static $defaultName = 'app:test'; | ||
- | |||
- | protected function configure() { | ||
- | | ||
- | // Description | ||
- | $this->setDescription("Permet de faire un test dans la console"); | ||
- | |||
- | // Aide si on lance la commande "bin/console app:test -h" | ||
- | $this->setHelp("Aide de la commande..."); | ||
- | |||
- | } | ||
- | |||
- | public function execute( | ||
- | InputInterface $input, | ||
- | OutputInterface $output | ||
- | ) { | ||
- | | ||
- | // Une ligne de texte | ||
- | $output->writeln("Bonjour !"); | ||
- | | ||
- | // Plusieurs lignes de texte | ||
- | $output->writeln([ | ||
- | "Première ligne", | ||
- | "Deuxième ligne" | ||
- | ]); | ||
- | | ||
- | return 0; | ||
- | } | ||
- | | ||
- | } | ||
- | </code> | ||
- | |||
- | L'**autoconfiguration** permet d'éviter d'avoir à recenser la nouvelle commande | ||
- | dans les services. | ||
- | |||
- | Lancer la commande : | ||
- | |||
- | <code bash> | ||
- | php bin/console app:test | ||
- | </code> | ||
- | |||
- | ===== Commande avec arguments ===== | ||
- | |||
- | <code php /src/command/CommandeTest.php> | ||
- | namespace App\Command; | ||
- | |||
- | 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 CommandeTest extends Command { | ||
- | |||
- | // Nom de la commande | ||
- | protected static $defaultName = 'app:test'; | ||
- | |||
- | protected function configure() { | ||
- | | ||
- | $this->addArgument('username', InputArgument::REQUIRED, 'The username of the user.'); | ||
- | | ||
- | // ... | ||
- | } | ||
- | |||
- | public function execute( | ||
- | InputInterface $input, | ||
- | OutputInterface $output | ||
- | ) { | ||
- | $username = $input->getArgument('username'); | ||
- | | ||
- | // ... | ||
- | | ||
- | $output->writeln("Nom d'utilisateur : " . $username); | ||
- | | ||
- | return 0; | ||
- | } | ||
- | | ||
- | } | ||
- | </code> | ||
- | |||
- | La valeur de l'argument doit être fournie sur la ligne de commande : | ||
- | |||
- | <code bash> | ||
- | php bin/console app:test marc | ||
- | </code> | ||
- | |||
- | ===== Envoi d'un email ===== | ||
- | |||
- | <code php /src/command/SendTestEmail.php> | ||
- | |||
- | namespace App\Command; | ||
- | |||
- | use \Swift_Mailer; | ||
- | use \Swift_Message; | ||
- | use Symfony\Component\Console\Command\Command; | ||
- | use Symfony\Component\Console\Input\InputInterface; | ||
- | use Symfony\Component\Console\Output\OutputInterface; | ||
- | |||
- | class SendTestEmail extends Command { | ||
- | |||
- | protected static $defaultName = 'app:sendtestemail'; | ||
- | |||
- | private $mailer; | ||
- | |||
- | public function __construct(Swift_Mailer $mailer) { | ||
- | $this->mailer = $mailer; | ||
- | parent::__construct(); | ||
- | } | ||
- | |||
- | public function execute( | ||
- | InputInterface $input, | ||
- | OutputInterface $output | ||
- | ) { | ||
- | $message = new Swift_Message(); | ||
- | $message->setFrom('bernard@example.com'); | ||
- | $message->setTo('jeanine@example.com'); | ||
- | $message->setSubject('Un petit test...'); | ||
- | $message->setBody( | ||
- | "Salut, ceci est un petit test :-)", | ||
- | "text/plain" | ||
- | ); | ||
- | |||
- | if($this->mailer->send($message)) { | ||
- | $output->writeln("OK, le message a été envoyé."); | ||
- | } else { | ||
- | $output->writeln("Le message n'a pas été envoyé..."); | ||
- | } | ||
- | | ||
- | return 0; | ||
- | } | ||
- | |||
- | } | ||
- | </code> | ||
- | |||