Heim >Backend-Entwicklung >PHP-Tutorial >Zentralisieren Sie Ihre Benachrichtigung und Auftragsabwicklung
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 verschiedener 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.
Das obige ist der detaillierte Inhalt vonZentralisieren Sie Ihre Benachrichtigung und Auftragsabwicklung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!