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, la même tâche peut être utilisée 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 e-mail 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 ainsi le système plus évolutif.
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.
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.
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