さまざまなイベント (ユーザー作成、パスワードのリセットなど) の後に複数の電子メール通知の送信を簡素化するには、通知とジョブの処理を一元化するためのいくつかの手順を実行できます。このアプローチにより、イベントごとに個別のジョブや通知を作成する必要がなく、作業がより簡単かつ拡張可能になります。
通知ごとに個別のジョブを作成する代わりに、通知とユーザーをパラメータとして受け取る単一の再利用可能なジョブを作成できます。こうすることで、同じジョブを使用して異なる通知を処理できます。
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 (繰り返さない) に保つのに役立ち、送信する電子メール通知が複数ある場合の保守が容易になります。
以上が通知とジョブ処理を一元化するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。