Comment créer une tâche planifiée dans Laravel ?

WBOY
Libérer: 2024-08-30 06:39:32
original
485 Les gens l'ont consulté

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.

Étape 1 : Créer la classe de courrier électronique

Tout d'abord, créons une nouvelle classe Mailable à l'aide de la commande Artisan suivante :

php artisan make:mail DailyMarketingEmail --view
Copier après la connexion

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.

Étape 2 : Créer une commande artisanale

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
Copier après la connexion

Cette commande générera une nouvelle classe de commandes dans le répertoire app/Console/Commands.

Étape 3 : Comprendre la structure de commande

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 :

How to create a scheduled Task in Laravel ?

Étape 4 : implémenter la logique de commande

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

    }
}
Copier après la connexion

Dans la méthode handle, nous récupérons tous les utilisateurs de la base de données et envoyons à chacun le DailyMarketingEmail.

Étape 5 : tester la commande

Vous pouvez tester manuellement votre commande en exécutant :

php artisan app:send-daily-marketing-emails

Copier après la connexion

Envisagez d'utiliser des outils comme Mailtrap ou MailHog pour récupérer et afficher les e-mails envoyés pendant les tests.

Étape 6 : Planifier la commande

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');
    }
}
Copier après la connexion

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.

Suggestions supplémentaires :

  1. 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.

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

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!