Heim >Backend-Entwicklung >PHP-Tutorial >Wie erstelle ich eine geplante Aufgabe in Laravel?

Wie erstelle ich eine geplante Aufgabe in Laravel?

WBOY
WBOYOriginal
2024-08-30 06:39:32501Durchsuche

Hallo zusammen! Heute werde ich Sie durch den Prozess der Erstellung einer geplanten Aufgabe in Laravel führen. Wir nehmen das Beispiel des Versendens einer täglichen Marketing-E-Mail an Benutzer.

Schritt 1: Erstellen Sie die E-Mail-Klasse

Erstellen wir zunächst eine neue Mailable-Klasse mit dem folgenden Artisan-Befehl:

php artisan make:mail DailyMarketingEmail --view

Dieser Befehl generiert eine neue Mailable-Klasse im App/Mail-Verzeichnis zusammen mit einer entsprechenden Ansichtsdatei, daily-marketing-email.blade.php, im Verzeichnis resources/views/mail/. Sie können den Inhalt der E-Mail in dieser Ansichtsdatei anpassen.

Schritt 2: Erstellen Sie einen Artisan-Befehl

Als nächstes erstellen wir einen Artisan-Befehl, der das Versenden unserer DailyMarketingEmail übernimmt. Führen Sie den folgenden Befehl aus:

php artisan make:command SendDailyMarketingEmail

Dieser Befehl generiert eine neue Befehlsklasse im Verzeichnis app/Console/Commands.

Schritt 3: Verstehen Sie die Befehlsstruktur

Nachdem Sie Ihren Befehl generiert haben, sehen Sie zwei Schlüsseleigenschaften in der generierten Klasse:

geschützte $signatur: Dies definiert den Namen und die Signatur Ihres Artisan-Befehls.
protected $description: Dies stellt eine Beschreibung Ihres Befehls bereit.
Mit der Handle-Methode in dieser Klasse definieren Sie die Logik Ihres Befehls.

Nachdem alles eingerichtet ist, können Sie alle Ihre Artisan-Befehle auflisten, indem Sie Folgendes ausführen:

PHP-Handwerker

Sie sollten Ihren Befehl in der Liste sehen:

How to create a scheduled Task in Laravel ?

Schritt 4: Implementieren Sie die Befehlslogik

Jetzt definieren wir die Logik innerhalb der Handle-Methode zum Versenden der Marketing-E-Mails:

<?php

namespace App\Console\Commands;

use App\Models\User;
use Illuminate\Console\Command;
use App\Mail\DailyMarketingMail;
use Illuminate\Support\Facades\Mail;

class SendDailyMarketingEmails extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:send-daily-marketing-emails';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Send a marketing email to all users';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $users = User::get(); 

        $users->each(function ($user) {
            Mail::to($user->email)->send(new DailyMarketingEmail);
        });

    }
}

Bei der Handle-Methode rufen wir alle Benutzer aus der Datenbank ab und senden jedem einzelnen die DailyMarketingEmail.

Schritt 5: Testen des Befehls

Sie können Ihren Befehl manuell testen, indem Sie Folgendes ausführen:

php artisan app:send-daily-marketing-emails

Erwägen Sie die Verwendung von Tools wie Mailtrap oder MailHog, um die gesendeten E-Mails während des Tests abzufangen und anzuzeigen.

Schritt 6: Planen Sie den Befehl

Um schließlich den täglichen Versand dieser E-Mail zu automatisieren, müssen wir den Befehl in der Schedule-Methode der Datei Kernel.php im Verzeichnis app/Console/ einplanen:

<?php

namespace App\Console;

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

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     */
    protected function schedule(Schedule $schedule): void
    {
        $schedule->command('app:send-daily-marketing-emails')->dailyAt('08:30'); 
    }

    /**
     * Register the commands for the application.
     */
    protected function commands(): void
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

Hier verwenden wir die Methode dailyAt('08:30'), um die Ausführung des Befehls jeden Tag um 08:30 Uhr zu planen. Sie können die Zeit nach Bedarf anpassen.

Zusätzliche Vorschläge:

  1. E-Mails in die Warteschlange stellen: Für eine große Anzahl von Benutzern empfiehlt es sich, die E-Mails in die Warteschlange zu stellen, anstatt sie alle auf einmal zu senden. Dies kann durch die Implementierung der ShouldQueue-Schnittstelle in der Mailable-Klasse erfolgen.

  2. Leistungsüberlegungen: Erwägen Sie bei großen Benutzergruppen die Optimierung von Datenbankabfragen und dem E-Mail-Versandprozess, um eine effiziente Leistung sicherzustellen.

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine geplante Aufgabe in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn