"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > مركزية الإخطارات الخاصة بك والتعامل مع المهمة

مركزية الإخطارات الخاصة بك والتعامل مع المهمة

تم النشر بتاريخ 2024-11-08
تصفح:757

Centralize your notification and job handling

لتبسيط إرسال إشعارات بريد إلكتروني متعددة بعد أحداث مختلفة (مثل إنشاء المستخدم، وإعادة تعيين كلمة المرور، وما إلى ذلك)، يمكنك اتخاذ بضع خطوات لـ مركزية الإشعارات والتعامل مع المهام. سيجعل هذا الأسلوب عملك أسهل وأكثر قابلية للتطوير دون الحاجة إلى إنشاء وظيفة منفصلة أو إشعار لكل حدث.

استراتيجيات لتبسيط التعامل مع إشعارات البريد الإلكتروني:

  1. استخدام وظيفة إعلام البريد الإلكتروني المعمم.
  2. الاستفادة من بنية مستمع الأحداث.
  3. إشعارات المجموعة المشابهة.

1. إنشاء مهمة إعلام البريد الإلكتروني المعمم:

بدلاً من إنشاء وظائف منفصلة لكل إشعار، يمكنك إنشاء وظيفة واحدة قابلة لإعادة الاستخدام تأخذ الإشعار والمستخدم كمعلمات. بهذه الطريقة، يمكن استخدام نفس الوظيفة للتعامل مع الإشعارات المختلفة.

وظيفة SendEmailNotificationJob المعممة:

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());

2. الاستفادة من بنية مستمع الأحداث:

بدلاً من إرسال المهام يدويًا بعد كل حدث، تسمح لك بنية استماع الأحداث في Laravel بتشغيل الإشعارات والمهام تلقائيًا بناءً على أحداث محددة (مثل إنشاء المستخدم).

الخطوة 1: تحديد الأحداث:

يمكنك تحديد حدث مثل UserCreated:


صنع حرفي PHP:حدث تم إنشاؤه بواسطة المستخدم
php artisan make:event UserCreated
مثال للحدث الذي أنشأه المستخدم:

تطبيق\أحداث مساحة الاسم؛ استخدم التطبيق\النماذج\المستخدم؛ استخدم Illuminate\Foundation\Events\Dispatchable; استخدم Illuminate\Queue\SerializesModels؛ فئة تم إنشاؤها بواسطة المستخدم { استخدام Dispatchable، SerializesModels؛ مستخدم $ عام؛ الوظيفة العامة __construct(المستخدم $user) { $this->user = $user; } }
php artisan make:event UserCreated
الخطوة 2: إنشاء المستمعين:

يمكنك إنشاء مستمع يرسل إشعارًا عند إطلاق الحدث:


صناعة PHP الحرفية: المستمع SendUserWelcomeNotification --event=UserCreated
php artisan make:event UserCreated
مثال المستمع:

تطبيق مساحة الاسم\المستمعون؛ استخدم App\Events\UserCreated; استخدم App\Jobs\SendEmailNotificationJob; استخدم App\Notifications\UserWelcomeNotification; فئة SendUserWelcomeNotification { مقبض الوظيفة العامة (حدث $UserCreated) { // إرسال مهمة إعلام البريد الإلكتروني SendEmailNotificationJob::dispatch($event->user, new UserWelcomeNotification()); } }
php artisan make:event UserCreated
الخطوة 3: إطلاق الحدث عند إنشاء المستخدم:

عندما يتم إنشاء مستخدم، يمكنك إطلاق الحدث، وسيتولى Laravel الباقي تلقائيًا:


استخدم التطبيق\الأحداث\إنشاء المستخدم؛ $user = User::create($data); حدث(new UserCreated($user));
php artisan make:event UserCreated
يسمح لك هذا الأسلوب بفصل منطق التعامل مع الإشعارات عن منطق عملك، مما يجعل النظام أكثر قابلية للتطوير.

3.

إشعارات المجموعة المشابهة:

إذا كان لديك العديد من الإشعارات المشابهة (على سبيل المثال، الإشعارات المتعلقة بالمستخدم مثل رسائل البريد الإلكتروني الترحيبية، وإعادة تعيين كلمة المرور، وما إلى ذلك)، فيمكنك إنشاء

خدمة الإشعارات التي تتعامل مع جميع إشعارات المستخدم بطريقة مركزية.

مثال لخدمة الإخطار:

تطبيق\خدمات مساحة الاسم؛ استخدم التطبيق\النماذج\المستخدم؛ استخدم App\Jobs\SendEmailNotificationJob; استخدم App\Notifications\UserWelcomeNotification; استخدم App\Notifications\PasswordResetNotification; خدمة إعلام الطبقة { الوظيفة العامة sendUserWelcomeEmail(المستخدم $user) { SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification()); } الوظيفة العامة sendPasswordResetEmail (المستخدم $ المستخدم) { SendEmailNotificationJob::dispatch($user, new PasswordResetNotification()); } // يمكنك إضافة المزيد من الطرق لأنواع مختلفة من الإخطارات }
php artisan make:event UserCreated
مثال للاستخدام:

في وحدات التحكم أو مستمعي الأحداث، يمكنك الآن ببساطة الاتصال بالخدمة:


$notificationService = new NotificationService(); $notificationService->sendUserWelcomeEmail($user);
php artisan make:event UserCreated
خاتمة:

  • وظيفة واحدة: يمكنك استخدام مهمة عامة (SendEmailNotificationJob) للتعامل مع أنواع مختلفة من الإشعارات.
  • بنية مستمع الأحداث: استخدم نظام مستمع الأحداث الخاص بـ Laravel لتشغيل الإشعارات تلقائيًا بناءً على أحداث النظام.
  • خدمة الإشعارات المركزية: قم بتجميع الإشعارات المتشابهة في خدمة لتحسين الإدارة وإمكانية إعادة الاستخدام.
يساعد هذا الأسلوب في الحفاظ على الكود الخاص بك جافًا (لا تكرر نفسك) ويسهل الحفاظ عليه عندما يكون لديك إشعارات متعددة عبر البريد الإلكتروني لإرسالها.

بيان الافراج يتم استنساخ هذه المقالة على: https://dev.to/msnmongare/centralize-your-notification-and-job-handling-1؟1 إذا كان هناك أي انتهاك ، فيرجى الاتصال بـ [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3