さまざまなイベント(ユーザー作成、パスワードのリセットなど)後の複数の電子メール通知の送信を簡素化するには、いくつかの手順を実行して、通知とジョブの処理を一元化。このアプローチにより、イベントごとに個別のジョブや通知を作成する必要がなく、作業がより簡単かつスケーラブルになります。
通知ごとに個別のジョブを作成する代わりに、通知とユーザーをパラメータとして受け取る単一の再利用可能なジョブを作成できます。こうすることで、同じジョブを使用して異なる通知を処理できます。
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);
このアプローチは、コードを DRY (繰り返さない) に保つのに役立ち、複数の電子メール通知を送信する場合の保守が容易になります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3