"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Centralisez vos notifications et la gestion des tâches

Centralisez vos notifications et la gestion des tâches

Publié le 2024-11-08
Parcourir:302

Centralize your notification and job handling

Pour simplifier l'envoi de plusieurs notifications par e-mail après divers événements (comme la création d'un utilisateur, la réinitialisation du mot de passe, etc.), vous pouvez prendre quelques mesures pour centraliser vos notifications et la gestion des tâches. Cette approche rendra votre travail plus facile et plus évolutif sans avoir à créer une tâche ou une notification distincte pour chaque événement.

Stratégies pour simplifier la gestion des notifications par e-mail :

  1. Utiliser une tâche de notification par e-mail généralisée.
  2. Exploiter l'architecture d'écoute d'événements.
  3. Regrouper les notifications similaires.

1. Créer une tâche de notification par e-mail généralisée :

Au lieu de créer des tâches distinctes pour chaque notification, vous pouvez créer une tâche unique réutilisable qui prend la notification et l'utilisateur comme paramètres. De cette façon, la même tâche peut être utilisée pour gérer différentes notifications.

SendEmailNotificationJob généralisé :

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Notifications\Notification;
use App\Models\User;

class SendEmailNotificationJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $user;
    public $notification;

    /**
     * Create a new job instance.
     *
     * @param  User $user
     * @param  Notification $notification
     * @return void
     */
    public function __construct(User $user, Notification $notification)
    {
        $this->user = $user;
        $this->notification = $notification;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Send the notification
        $this->user->notify($this->notification);
    }
}

Avec ce travail généralisé, vous pouvez envoyer différents types de notifications par e-mail en utilisant le même travail :

Exemple d'utilisation :

use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;
use App\Models\User;

$user = User::find(1); // Example user

// Dispatch a welcome email notification
SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification());

// Dispatch a password reset notification
SendEmailNotificationJob::dispatch($user, new PasswordResetNotification());

2. Exploiter l'architecture d'écoute d'événements :

Au lieu de répartir manuellement les tâches après chaque événement, l'architecture d'écoute d'événements de Laravel vous permet de déclencher automatiquement des notifications et des tâches en fonction d'événements spécifiques (comme la création d'utilisateurs).

Étape 1 : Définir les événements :

Vous pouvez définir un événement tel que UserCreated :

php artisan make:event UserCreated

Exemple d'événement créé par l'utilisateur :

namespace App\Events;

use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserCreated
{
    use Dispatchable, SerializesModels;

    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

Étape 2 : Créer des auditeurs :

Vous pouvez créer un écouteur qui envoie une notification lorsque l'événement est déclenché :

php artisan make:listener SendUserWelcomeNotification --event=UserCreated

Exemple d'écouteur :

namespace App\Listeners;

use App\Events\UserCreated;
use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;

class SendUserWelcomeNotification
{
    public function handle(UserCreated $event)
    {
        // Dispatch the email notification job
        SendEmailNotificationJob::dispatch($event->user, new UserWelcomeNotification());
    }
}

Étape 3 : Déclenchement d'un événement lors de la création d'un utilisateur :

Chaque fois qu'un utilisateur est créé, vous pouvez déclencher l'événement et Laravel gérera automatiquement le reste :

use App\Events\UserCreated;

$user = User::create($data);
event(new UserCreated($user));

Cette approche vous permet de dissocier la logique de gestion des notifications de votre logique métier, rendant ainsi le système plus évolutif.

3. Notifications similaires de groupe :

Si vous recevez de nombreuses notifications similaires (par exemple, des notifications liées aux utilisateurs telles que des e-mails de bienvenue, des réinitialisations de mots de passe, etc.), vous pouvez créer un Service de notification qui gère toutes les notifications des utilisateurs de manière centralisée.

Exemple de service de notification :

namespace App\Services;

use App\Models\User;
use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;
use App\Notifications\PasswordResetNotification;

class NotificationService
{
    public function sendUserWelcomeEmail(User $user)
    {
        SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification());
    }

    public function sendPasswordResetEmail(User $user)
    {
        SendEmailNotificationJob::dispatch($user, new PasswordResetNotification());
    }

    // You can add more methods for different types of notifications
}

Exemple d'utilisation :

Dans vos contrôleurs ou écouteurs d'événements, vous pouvez désormais simplement appeler le service :

$notificationService = new NotificationService();
$notificationService->sendUserWelcomeEmail($user);

Conclusion:

  • Tâche unique : vous pouvez utiliser une tâche généralisée (SendEmailNotificationJob) pour gérer différents types de notifications.
  • Architecture d'écoute d'événements : utilisez le système d'écoute d'événements de Laravel pour déclencher automatiquement des notifications basées sur les événements du système.
  • Service de notification centralisé : regroupez les notifications similaires dans un service pour une meilleure gestion et réutilisation.

Cette approche permet de garder votre code SEC (Ne vous répétez pas) et facilite sa maintenance lorsque vous avez plusieurs notifications par e-mail à envoyer.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/msnmongare/centralize-your-notification-and-job-handling-1oid?1 En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3