Laravel : créer et lancer un script PHP en ligne de commande

Depuis que j’ai découvert le framework Laravel il y a maintenant quelques années, on peut dire que ma vie de développeur a un peu changé. Je l’utilise pour tout un tas de choses, que ce soit pour faire des sites, des applications plus complexes, des tests, même beaucoup de tests … Bref c’est vraiment devenu un outil indispensable pour moi et il serait difficile de m’en passer.

Je reparlerai surement plus longuement de Laravel dans un autre article plus généraliste mais ici on va surtout s’intéresser à la ligne de commande avec avec le framework. En effet, il est possible d’utiliser PHP directement en ligne de commande comme on pourrait le faire avec Python, Bash et bien d’autres. Le langage PHP ne se limite pas qu’à faire des sites dynamiques. Il est donc possible d’utiliser ce que l’on appelle Laravel Artisan. Il s’agit d’une Interface en Ligne de Commande (le CLI) qui permet interagir directement avec son application. C’est ce que nous allons voir ici.

D’ailleurs si je fais cet article directement sur la ligne de commande avec Laravel Artisan Console c’est aussi parce que dans plusieurs tutoriels à venir, je vais beaucoup utiliser PHP CLI via cette solution pour des raisons de confort. Vous allez voir c’est très pratique et vous ne pourrez plus vous en passer vous aussi !

Avec Laravel nous allons pouvoir directement lancer nos scripts en back dans un cadre un peu plus sympathique et surtout ordonné. Pour ce tutoriel je pars du principe que vous avez réussi à installer le framework sur votre machine de développement.

Après l’installation du framework Laravel, rendez-vous dans son dossier pour vérifier que tout fonctionne bien, vous pouvez directement lancer un :

 php artisan

Cette commande qui est à la base ce système sous Laravel devrait normalement vous lister l’ensemble des commandes disponible par défaut avec une installation fraiche. Vous devriez alors obtenir la chose suivante :

La liste des commandes de base dans Laravel

Comment lancer des commandes avec Laravel Artisan ?

Maintenant que l’on sait que notre Laravel est bien installé et tourne correctement, on peut commencer à tester l’exécution de commandes PHP Artisan avec des paramètres. Pour se faire on va par exemple lister les routes de notre nouvelle installation :

php artisan route:list

Ce qui va nous donner le résultat suivant en listant les routes par défaut de notre application :

La liste des routes dans notre Laravel

Il est aussi possible par exemple de régénérer la clé APP_KEY de notre .env avec la commande suivante :

php artisan key:generate

Qui nous indique en réponse que tout s’est bien passé :

Notre nouvelle clé est bien générée dans le .env

Il s’agit vraiment d’exemples simples pour commencer à voir et comprendre la structure de ces commandes et surtout comment les appeler très facilement.

Comment créer une nouvelle commande PHP Artisan dans Laravel ?

Vous avez remarqué que dans l’exemple au dessus, nous avons quelquechose:autrechose. C’est un principe que nous allons voir tout de suite pour avoir une application bien organisée. Par exemple, et c’est ce qui va doublement nous intéresser, on a vu au dessus la liste des commandes disponibles. En la parcourant on découvre :

La liste de toutes les commandes « make »

Pour continuer à avoir un projet bien organisé on va donc s’efforcer de respecter ce principe. Ainsi, tout ce qui sert à créer un nouveau composant de Laravel est donc bien labellisé par un make:quelquechose. Lorsque vous allez ajouter de nouvelles commandes à votre application, essayez donc de bien respecter une nomenclature en fonction du rôle de votre nouvelle commande. J’indiquais précédemment que cela était doublement intéressant car pour créer une nouvelle commande nous allons utiliser ce make. Si je souhaite créer une commande qui affiche quelque chose, je vais donc faire :

php artisan make:command ZoneTutoEchoSimple

« ZoneTutoEchoSimple » est le paramètre que je donne à ma commande make et il va donc créer un fichier de commande avec ce nom. Laravel m’indique que la commande s’est bien crée sans encombres :

Laravel me donne l’emplacement de cette nouvelle commande

Nous obtenons ainsi le fichier suivant qu’il ne nous reste plus qu’à modifier :

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

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

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

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        return Command::SUCCESS;
    }
}

Il y a plusieurs choses à modifier pour obtenir une commande simple qui fonctionnera directement :

  • La variable $signature est ce qui va permettre d’appeler notre commande
  • La variable $description c’est pour s’y retrouver, c’est une description de votre commande qui s’affichera lorsque vous lancez php artisan. Quand vous avez plus de 200 commandes croyez moi c’est utile.

Je modifie donc ces valeurs dans ma petite commande. Dans la partie handle qui exécute votre code j’ajoute un petit echo avec un for. J’ai aussi supprimé les commentaires qui ne m’intéressent pas ici pour la lisibilité. J’ai donc maintenant la commande suivante :

<?php

namespace App\Console\Commands;
use Illuminate\Console\Command;

class ZoneTutoEchoSimple extends Command
{
    protected $signature = 'zonetuto:echosimple';
    protected $description = 'Un exemple echo simple avec un for';
    public function handle()
    {
        echo "Salut c'est zonetuto.fr, voici un for : " ." \n";
        for ($i = 1; $i <= 10; $i++) {
            echo $i . "\n";
        }
        echo "Le script est fini " ." \n";
        return Command::SUCCESS;
    }
}

Quand je relance un php artisan je vois que ma commande est bien la :

Ma nouvelle commande est bien listée

Maintenant j’appelle ma commande avec :

php artisan zonetuto:echosimple

Qui va alors me renvoyer le résultat suivant :

Mon script s’exécute dans une commande Laravel

Voila vous savez maintenant créer et lancer une nouvelle commande dans Laravel, vous pouvez maintenant y faire tourner les scripts PHP que vous voulez. J’ai certaines commandes qui tournent des heures là dedans, si votre PHP est bien configuré cela ne pose aucun soucis. Vous profitez en plus de tout l’écosystème de Laravel !

Laisser un commentaire