Recherche…


Créer une tâche

Vous pouvez créer une tâche (commande de la console) dans Laravel en utilisant Artisan. Depuis votre ligne de commande:

php artisan make:console MyTaskName

Cela crée le fichier dans app / Console / Commands / MyTaskName.php . Il ressemblera à ceci:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MyTaskName 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';

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

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

Certaines parties importantes de cette définition sont les suivantes:

  • La propriété $signature identifie votre commande. Vous pourrez exécuter cette commande ultérieurement via la ligne de commande en utilisant Artisan en exécutant la php artisan command:name (Where command:name correspond à la $signature votre commande)
  • La propriété $description est l'aide / l'utilisation de Artisan à côté de votre commande lorsqu'elle est disponible.
  • La méthode handle() est l'endroit où vous écrivez le code pour votre commande.

Finalement, votre tâche sera mise à la disposition de la ligne de commande via Artisan. Le protected $signature = 'command:name'; propriété sur cette classe est ce que vous utiliseriez pour l'exécuter.

Rendre une tâche disponible

Vous pouvez rendre une tâche accessible à Artisan et à votre application dans le fichier app / Console / Kernel.php .

La classe Kernel contient un tableau nommé $commands qui rend vos commandes disponibles pour votre application.

Ajoutez votre commande à ce tableau, afin de le rendre disponible pour Artisan et votre application.

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        Commands\Inspire::class,
        Commands\MyTaskName::class // This line makes MyTaskName available
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
    
    }
}

Une fois cela fait, vous pouvez maintenant accéder à votre commande via la ligne de commande, en utilisant Artisan. En supposant que votre commande a la propriété $signature définie sur my:task , vous pouvez exécuter la commande suivante pour exécuter votre tâche:

php artisan my:task

Planification de votre tâche

Lorsque votre commande est mise à la disposition de votre application, vous pouvez utiliser Laravel pour planifier son exécution à des intervalles prédéfinis, comme vous le feriez avec un CRON.

Dans le fichier app / Console / Kernel.php , vous trouverez une méthode de schedule que vous pouvez utiliser pour planifier votre tâche.

<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        Commands\Inspire::class,
        Commands\MyTaskName::class
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('my:task')->everyMinute();
        // $schedule->command('my:task')->everyFiveMinutes();
        // $schedule->command('my:task')->daily();
        // $schedule->command('my:task')->monthly();
        // $schedule->command('my:task')->sundays();
    }
}

En supposant que la $signature votre tâche est my:task vous pouvez la planifier comme indiqué ci-dessus, à l'aide de l'objet Schedule $schedule . Laravel fournit de nombreuses façons de planifier votre commande, comme indiqué dans les lignes ci-dessus.

Définition du planificateur à exécuter

Le planificateur peut être exécuté en utilisant la commande:

php artisan schedule:run

Le planificateur doit être exécuté toutes les minutes pour fonctionner correctement. Vous pouvez configurer cela en créant un travail cron avec la ligne suivante, qui exécute le planificateur toutes les minutes en arrière-plan.

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow