Accéder à un controller Laravel depuis CLI de PHP

Vous vous demandez comment accéder à un controller ou une quelconque classe de Laravel depuis CLI de PHP (artisan) ?

Pour appeler un controller depuis artisan, il faut créer une commande.

Dans l’exemple ci-dessous, nous allons créer une classe « Cron » qui permettra de lancer des fonctions depuis artisan.

Ce fichier permet de définir la nouvelle commande Laravel :

<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class Cron extends Command {

   protected $name = 'cron:call';
   protected $description = 'Call Cron from CLI';

   public function __construct(){
       parent::__construct();
   }

   public function fire(){
       $request = $this->option('uri');
       $cron = new CronController;
       $cron->$request();
   }

   protected function getOptions(){
       return [
           ['uri', null, InputOption::VALUE_REQUIRED, 'The cron function', null],
       ];
   }

}
app/commands/Cron.php

Ensuite, après avoir créé ce fichier, il faut ajouter la ligne suivante dans le fichier app/start/artisan.php :

Artisan::add(new Cron);
app/start/artisan.php

Maintenant, vous pouvez lancer la commande artisan suivante pour appeler des fonctions de la classe app/controllers/CronController.php (nom_fonction correspond à la fonction de CronController que vous souhaitez appeler).

php artisan  cron:call --function=nom_fonction
Commande cron:call artisan

Si vous souhaitez lancer cette commande automatiquement, créez le cronjob suivant :

/usr/local/bin/php /home/.../.../public_html/artisan cron:call --function=nom_fonction
cronjob artisan

Remplacer « …/… » par le chemin de votre installation bien sûr.

Cette technique est valable pour Laravel 4.2

pour Laravel 5, il faut adapter le code suivant selon la documentation officielle.