Untuk memudahkan penghantaran berbilang pemberitahuan e-mel selepas pelbagai acara (seperti penciptaan pengguna, penetapan semula kata laluan, dll.), anda boleh mengambil beberapa langkah untuk memusatkan pemberitahuan dan pengendalian kerja anda. Pendekatan ini akan menjadikan kerja anda lebih mudah dan lebih berskala tanpa perlu membuat kerja atau pemberitahuan berasingan untuk setiap acara.
Daripada membuat kerja berasingan untuk setiap pemberitahuan, anda boleh membuat kerja boleh guna semula tunggal yang mengambil pemberitahuan dan pengguna sebagai parameter. Dengan cara ini, kerja yang sama boleh digunakan untuk mengendalikan pemberitahuan yang berbeza.
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); } }
Dengan kerja umum ini, anda boleh menghantar pelbagai jenis pemberitahuan e-mel menggunakan kerja yang sama:
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());
Daripada menghantar kerja secara manual selepas setiap acara, seni bina pendengar acara Laravel membolehkan anda mencetuskan pemberitahuan dan kerja secara automatik berdasarkan acara tertentu (seperti penciptaan pengguna).
Anda boleh menentukan acara seperti 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; } }
Anda boleh mencipta pendengar yang menghantar pemberitahuan apabila acara dicetuskan:
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()); } }
Setiap kali pengguna dibuat, anda boleh melancarkan acara itu dan Laravel akan mengendalikan selebihnya secara automatik:
use App\Events\UserCreated; $user = User::create($data); event(new UserCreated($user));
Pendekatan ini membolehkan anda memisahkan logik pengendalian pemberitahuan daripada logik perniagaan anda, menjadikan sistem lebih berskala.
Jika anda mempunyai banyak pemberitahuan serupa (cth., pemberitahuan berkaitan pengguna seperti e-mel alu-aluan, tetapan semula kata laluan, dll.), anda boleh membuat Perkhidmatan Pemberitahuan yang mengendalikan semua pemberitahuan pengguna secara terpusat.
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 }
Dalam pengawal atau pendengar acara anda, anda kini boleh menghubungi perkhidmatan tersebut:
$notificationService = new NotificationService(); $notificationService->sendUserWelcomeEmail($user);
Pendekatan ini membantu mengekalkan kod anda KERING (Jangan Ulangi Sendiri) dan menjadikannya lebih mudah untuk diselenggara apabila anda mempunyai berbilang pemberitahuan e-mel untuk dihantar.
Atas ialah kandungan terperinci Pusatkan pemberitahuan dan pengendalian kerja anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!