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.
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.
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.
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:
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.
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.
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.
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.
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!