Um das Versenden mehrerer E-Mail-Benachrichtigungen nach verschiedenen Ereignissen (z. B. Benutzererstellung, Passwortzurücksetzung usw.) zu vereinfachen, können Sie ein paar Schritte unternehmen, um Ihre Benachrichtigungen und Auftragsabwicklung zu zentralisieren. Dieser Ansatz macht Ihre Arbeit einfacher und skalierbarer, ohne dass für jedes Ereignis ein separater Job oder eine separate Benachrichtigung erstellt werden muss.
Anstatt für jede Benachrichtigung separate Jobs zu erstellen, können Sie einen einzelnen wiederverwendbaren Job erstellen, der die Benachrichtigung und den Benutzer als Parameter verwendet. Auf diese Weise kann derselbe Job zur Bearbeitung unterschiedlicher Benachrichtigungen verwendet werden.
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); } }
Mit diesem allgemeinen Job können Sie verschiedene Arten von E-Mail-Benachrichtigungen mit demselben Job versenden:
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());
Anstatt Jobs nach jedem Ereignis manuell zu versenden, können Sie mit der Event-Listener-Architektur von Laravel automatisch Benachrichtigungen und Jobs basierend auf bestimmten Ereignissen (z. B. Benutzererstellung) auslösen.
Sie können ein Ereignis wie UserCreated definieren:
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; } }
Sie können einen Listener erstellen, der eine Benachrichtigung sendet, wenn das Ereignis ausgelöst wird:
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()); } }
Immer wenn ein Benutzer erstellt wird, können Sie das Ereignis auslösen und Laravel erledigt den Rest automatisch:
use App\Events\UserCreated; $user = User::create($data); event(new UserCreated($user));
Mit diesem Ansatz können Sie die Logik der Benachrichtigungsverarbeitung von Ihrer Geschäftslogik entkoppeln und so das System skalierbarer machen.
Wenn Sie viele ähnliche Benachrichtigungen haben (z. B. benutzerbezogene Benachrichtigungen wie Willkommens-E-Mails, Passwort-Resets usw.), können Sie einen Benachrichtigungsdienst erstellen, der alle Benutzerbenachrichtigungen zentral verarbeitet.
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 }
In Ihren Controllern oder Event-Listenern können Sie jetzt einfach den Dienst aufrufen:
$notificationService = new NotificationService(); $notificationService->sendUserWelcomeEmail($user);
Dieser Ansatz trägt dazu bei, dass Ihr Code trocken bleibt (Don't Repeat Yourself) und erleichtert die Wartung, wenn Sie mehrere E-Mail-Benachrichtigungen senden müssen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3