[PHP] Mémo – Créer une commande avec Laravel

Laravel fournit une interface en ligne de commande qui permet d’exécuter des scripts PHP directement depuis un terminal. Celle-ci s’appelle Artisan. On peut ainsi facilement gérer des tâches comme l’envoi de mails, la copie de fichiers, ou effectuer des interactions en base de données.

Créer une commande avec Laravel

Créer la classe

Votre commande sera implémentée à l’aide d’une classe. Si ce n’est pas encore fait, créez le dossier Commands dans app\Console.

Ensuite créez une classe qui héritera de Command.

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MyTestCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'my:test';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
    }
}

Voici ce qu’on retrouve dans la classe :

  • La signature de la commande (nom de la commande, arguments, options) ;
  • La description de la commande (un texte qui indique ce que fait la commande) ;
  • Un constructeur par défaut ;
  • Une méthode handle() qui contient la logique de la commande.

Enregistrer la commande

Il faudra enregistrer la commande en l’ajoutant au tableau défini dans la classe app\Console\Kernel.php.

    protected $commands = [
        MyTestCommand::class,
    ];

Dans les versions plus récentes de Laravel, toute classe qui se trouve dans le sous-dossier Commands, est chargée par défaut, du moins si on n’a pas enlevé l’appel qui se charge de cela.

Personnaliser la commande

On peut personnaliser la commande en y ajoutant des arguments et des options. On ajoute ceux-ci dans la signature.

Pour l’appel de la commande dans un terminal, préfixez chaque option par deux tirets courts. On n’ajoute rien de spécifique lorsqu’on spécifie un argument.

Exemple :

php artisan my:test argument1 --option1

Et dans la signature cela se traduit par :

protected $signature = 'my:test {argument1} {--option1}';

Pour récupérer :

  • Un argument : $this->argument(‘arg_name’);
  • Une option : $this->option(‘option_name’);

Exemple :

$this->option("option1");

Ceci renverra true si on spécifie l’option lors de l’appel de la commande, sinon false.

Évidemment on peut modifier la signature pour accepter des valeurs alphanumériques dans l’option. Dans ce cas, on doit adapter la signature en indiquant plutôt {option1=}.

On aura un appel similaire à ceci :

php artisan my:test argument1 --option1=TEST

Afficher des messages dans le terminal

Il existe deux méthodes que vous pouvez utiliser pour afficher une information ou une erreur.

  • $this->info(‘texte’);
  • $this->error(‘texte’);

Documentation