Para simplificar o envio de várias notificações por e-mail após vários eventos (como criação de usuário, redefinições de senha, etc.), você pode seguir algumas etapas para centralizar sua notificação e tratamento de trabalhos. Essa abordagem tornará seu trabalho mais fácil e escalonável sem a necessidade de criar um trabalho ou notificação separada para cada evento.
Em vez de criar trabalhos separados para cada notificação, você pode criar um único trabalho reutilizável que usa a notificação e o usuário como parâmetros. Dessa forma, o mesmo trabalho pode ser usado para lidar com notificações diferentes.
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); } }
Com esse trabalho generalizado, você pode enviar diferentes tipos de notificações por e-mail usando o mesmo trabalho:
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());
Em vez de despachar trabalhos manualmente após cada evento, a arquitetura de ouvinte de eventos do Laravel permite que você acione automaticamente notificações e trabalhos com base em eventos específicos (como criação de usuário).
Você pode definir um evento como 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; } }
Você pode criar um listener que envia uma notificação quando o evento é disparado:
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()); } }
Sempre que um usuário é criado, você pode disparar o evento, e o Laravel cuidará automaticamente do resto:
use App\Events\UserCreated; $user = User::create($data); event(new UserCreated($user));
Essa abordagem permite dissociar a lógica de tratamento de notificações da sua lógica de negócios, tornando o sistema mais escalonável.
Se você tiver muitas notificações semelhantes (por exemplo, notificações relacionadas ao usuário, como e-mails de boas-vindas, redefinições de senha etc.), poderá criar um Serviço de Notificação que processa todas as notificações do usuário de maneira centralizada.
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 }
Em seus controladores ou ouvintes de eventos, agora você pode simplesmente chamar o serviço:
$notificationService = new NotificationService(); $notificationService->sendUserWelcomeEmail($user);
Essa abordagem ajuda a manter seu código DRY (Don’t Repeat Yourself) e facilita a manutenção quando você tem várias notificações por e-mail para enviar.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3