Para simplificar el envío de múltiples notificaciones por correo electrónico después de varios eventos (como creación de usuarios, restablecimiento de contraseñas, etc.), puedes seguir algunos pasos para centralizar tus notificaciones y manejo de trabajos. Este enfoque hará que su trabajo sea más fácil y escalable sin tener que crear un trabajo o una notificación por separado para cada evento.
En lugar de crear trabajos separados para cada notificación, puede crear un trabajo reutilizable único que tome la notificación y el usuario como parámetros. De esta manera, el mismo trabajo se puede utilizar para manejar diferentes notificaciones.
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); } }
Con este trabajo generalizado, puedes enviar diferentes tipos de notificaciones por correo electrónico usando el mismo trabajo:
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());
En lugar de enviar trabajos manualmente después de cada evento, la arquitectura de escucha de eventos de Laravel le permite activar automáticamente notificaciones y trabajos basados en eventos específicos (como la creación de usuarios).
Puedes definir un 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; } }
Puedes crear un oyente que envíe una notificación cuando se active el evento:
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()); } }
Siempre que se crea un usuario, puedes activar el evento y Laravel se encargará automáticamente del resto:
use App\Events\UserCreated; $user = User::create($data); event(new UserCreated($user));
Este enfoque le permite desacoplar la lógica de manejo de notificaciones de su lógica empresarial, lo que hace que el sistema sea más escalable.
Si tiene muchas notificaciones similares (por ejemplo, notificaciones relacionadas con el usuario, como correos electrónicos de bienvenida, restablecimiento de contraseña, etc.), puede crear un Servicio de notificaciones que maneje todas las notificaciones de los usuarios de forma 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 }
En tus controladores o detectores de eventos, ahora puedes simplemente llamar al servicio:
$notificationService = new NotificationService(); $notificationService->sendUserWelcomeEmail($user);
Este enfoque ayuda a mantener tu código SECO (No lo repitas) y hace que sea más fácil de mantener cuando tienes varias notificaciones por correo electrónico para enviar.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3