Bonjour à tous ! Aujourd'hui, je vais vous expliquer le processus de création d'une tâche planifiée dans Laravel. Nous prendrons l'exemple de l'envoi d'un email marketing quotidien aux utilisateurs.
Tout d'abord, créons une nouvelle classe Mailable à l'aide de la commande Artisan suivante :
php artisan make:mail DailyMarketingEmail --view
Cette commande génère une nouvelle classe Mailable dans le répertoire App/Mail, ainsi qu'un fichier de vue correspondant, daily-marketing-email.blade.php, dans le répertoire resources/views/mail/. Vous pouvez personnaliser le contenu de l'e-mail dans ce fichier d'affichage.
Ensuite, nous allons créer une commande Artisan qui gérera l'envoi de notre DailyMarketingEmail. Exécutez la commande suivante :
php artisan make:command SendDailyMarketingEmail
Cette commande générera une nouvelle classe de commandes dans le répertoire app/Console/Commands.
Après avoir généré votre commande, vous verrez deux propriétés clés dans la classe générée :
protected $signature : Ceci définit le nom et la signature de votre commande Artisan.
protected $description : ceci fournit une description de votre commande.
La méthode handle de cette classe est l’endroit où vous définirez la logique de votre commande.
Une fois que tout est configuré, vous pouvez lister toutes vos commandes Artisan en exécutant :
artisan php
Vous devriez voir votre commande dans la liste :
Maintenant, définissons la logique dans la méthode handle pour envoyer les e-mails marketing :
<?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); }); } }
Dans la méthode handle, nous récupérons tous les utilisateurs de la base de données et envoyons à chacun le DailyMarketingEmail.
Vous pouvez tester manuellement votre commande en exécutant :
php artisan app:send-daily-marketing-emails
Envisagez d'utiliser des outils comme Mailtrap ou MailHog pour récupérer et afficher les e-mails envoyés pendant les tests.
Enfin, pour automatiser l'envoi de cet email quotidiennement, il faut planifier la commande dans la méthode planning du fichier Kernel.php situé dans le répertoire app/Console/ :
<?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'); } }
Ici, nous utilisons la méthode dailyAt('08:30') pour planifier l'exécution de la commande tous les jours à 08h30. Vous pouvez ajuster l'heure selon vos besoins.
Mise en file d'attente des e-mails : pour un grand nombre d'utilisateurs, c'est une bonne pratique de mettre les e-mails en file d'attente plutôt que de les envoyer tous en même temps. Cela peut être fait en implémentant l'interface ShouldQueue dans la classe Mailable.
Considérations relatives aux performances : pour les grandes bases d'utilisateurs, envisagez d'optimiser les requêtes de base de données et le processus d'envoi d'e-mails pour garantir des performances efficaces.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!