Чтобы упростить отправку нескольких уведомлений по электронной почте после различных событий (например, создания пользователя, сброса пароля и т. д.), вы можете предпринять несколько шагов по централизации уведомлений и обработки заданий. Такой подход сделает вашу работу проще и масштабируемее без необходимости создавать отдельное задание или уведомление для каждого события.
Вместо создания отдельных заданий для каждого уведомления вы можете создать одно многократно используемое задание, которое принимает уведомление и пользователя в качестве параметров. Таким образом, одно и то же задание можно использовать для обработки разных уведомлений.
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); } }
С помощью этого обобщенного задания вы можете отправлять различные типы уведомлений по электронной почте, используя одно и то же задание:
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());
Вместо того, чтобы вручную отправлять задания после каждого события, архитектура прослушивателя событий Laravel позволяет автоматически запускать уведомления и задания на основе определенных событий (например, создания пользователя).
Вы можете определить событие, например 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; } }
Вы можете создать прослушиватель, который отправляет уведомление при возникновении события:
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()); } }
Каждый раз, когда создается пользователь, вы можете запустить событие, а Laravel автоматически обработает все остальное:
use App\Events\UserCreated; $user = User::create($data); event(new UserCreated($user));
Такой подход позволяет отделить логику обработки уведомлений от вашей бизнес-логики, что делает систему более масштабируемой.
Если у вас много похожих уведомлений (например, уведомления, связанные с пользователями, такие как приветственные письма, сброс пароля и т. д.), вы можете создать Службу уведомлений, которая будет централизованно обрабатывать все уведомления пользователей.
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 }
Теперь в ваших контроллерах или прослушивателях событий вы можете просто вызвать службу:
$notificationService = new NotificationService(); $notificationService->sendUserWelcomeEmail($user);
Этот подход помогает сохранить ваш код СУХИМ (не повторяться) и облегчает его поддержку, когда вам нужно отправить несколько уведомлений по электронной почте.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3