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.
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, le même travail peut être utilisé pour gérer différentes notifications.
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 courrier électronique en utilisant le même travail :
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());
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).
Vous pouvez définir un événement tel que UserCreated :
php artisan make:event UserCreated
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; } }
Vous pouvez créer un écouteur qui envoie une notification lorsque l'événement est déclenché :
php artisan make:listener SendUserWelcomeNotification --event=UserCreated
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()); } }
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 le système plus évolutif.
Si vous disposez 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.
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 }
Dans vos contrôleurs ou écouteurs d'événements, vous pouvez désormais simplement appeler le service :
$notificationService = new NotificationService(); $notificationService->sendUserWelcomeEmail($user);
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.
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!