Suche…


Eine Aufgabe erstellen

Sie können mit Artisan eine Aufgabe (Konsolenbefehl) in Laravel erstellen. Von Ihrer Befehlszeile aus:

php artisan make:console MyTaskName

Dadurch wird die Datei in app / Console / Commands / MyTaskName.php erstellt . Es wird so aussehen:

<?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()
    {
        //
    }
}

Einige wichtige Teile dieser Definition sind:

  • Die $signature -Eigenschaft kennzeichnet Ihren Befehl. Sie können diesen Befehl später über die Befehlszeile mit Artisan ausführen, indem Sie den Befehl php artisan command:name ausführen php artisan command:name (wobei command:name mit der $signature Ihres Befehls übereinstimmt).
  • Die $description Eigenschaft wird in Artisans Hilfe / Verwendung neben Ihrem Befehl angezeigt, wenn er verfügbar ist.
  • In der handle() -Methode schreiben Sie den Code für Ihren Befehl.

Schließlich wird Ihre Aufgabe über Artisan der Befehlszeile zur Verfügung gestellt. Die protected $signature = 'command:name'; Diese Eigenschaft ist die Eigenschaft, die Sie zum Ausführen der Klasse verwenden würden.

Aufgabe zur Verfügung stellen

Sie können Artisan und Ihrer Anwendung eine Aufgabe in der Datei app / Console / Kernel.php zur Verfügung stellen .

Die Kernel Klasse enthält ein Array namens $commands das Ihre Befehle für Ihre Anwendung verfügbar macht.

Fügen Sie Ihrem Array Ihren Befehl hinzu, um ihn Artisan und Ihrer Anwendung zur Verfügung zu stellen.

<?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)
    {
    
    }
}

Sobald dies geschehen ist, können Sie jetzt über Artisan auf die Befehlszeile zugreifen. Wenn Sie davon ausgehen, dass für den Befehl die $signature -Eigenschaft auf my:task , können Sie den folgenden Befehl ausführen, um Ihre Task auszuführen:

php artisan my:task

Planen Sie Ihre Aufgabe

Wenn Ihr Befehl Ihrer Anwendung zur Verfügung gestellt wird, können Sie mit Laravel die Ausführung in vordefinierten Intervallen planen, genau wie bei einem CRON.

In der Datei app / Console / Kernel.php finden Sie eine schedule , mit der Sie Ihre Aufgabe planen können.

<?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();
    }
}

Angenommen, die $signature -Unterschrift Ihrer Aufgabe ist my:task Sie können sie wie oben gezeigt mit dem Schedule $schedule Objekt Schedule $schedule . Laravel bietet eine Vielzahl von Möglichkeiten, Ihren Befehl zu planen, wie in den kommentierten Zeilen oben gezeigt.

Festlegen, dass der Scheduler ausgeführt wird

Der Scheduler kann mit dem folgenden Befehl ausgeführt werden:

php artisan schedule:run

Der Scheduler muss jede Minute ausgeführt werden, um korrekt zu funktionieren. Sie können dies einrichten, indem Sie einen cron-Job mit der folgenden Zeile erstellen, in der der Scheduler jede Minute im Hintergrund ausgeführt wird.

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow