Créer des commandes console permettra, entre autres choses, d'appeler une fonction du site à intervalle régulier via une tâche cron.
Les commandes perso sont préfixées du mot app:
php bin/console list app
... Available commands for the "app" namespace: 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.
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; } }
L'autoconfiguration permet d'éviter d'avoir à recenser la nouvelle commande dans les services.
Lancer la commande :
php bin/console app:test
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; } }
La valeur de l'argument doit être fournie sur la ligne de commande :
php bin/console app:test marc
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; } }