JavaScript is not enabled!...Please enable javascript in your browser

جافا سكريبت غير ممكن! ... الرجاء تفعيل الجافا سكريبت في متصفحك.

Home

كيف أنشأت نظام إشعارات ذكي في Laravel باستخدام Events وListeners – بدون Firebase أو أدوات خارجية

 



✍️ مقدمة:

الإشعارات أصبحت جزءًا أساسيًا من تجربة المستخدم.
في هذا المقال، سأشارك كيف قمت ببناء نظام إشعارات داخلي ذكي في Laravel يعتمد على الأحداث (Events) والمستمعين (Listeners) بدون أي مكتبات خارجية مثل Firebase أو Pusher.

الهدف من هذا النظام هو:

"إرسال إشعار ديناميكي عند حدوث حدث معين مثل تسجيل مستخدم جديد، أو إرسال رسالة دعم، أو تغيير حالة الطلب."


🔧 لماذا لم أستخدم أدوات خارجية؟

  • لأني أردت التحكم الكامل في المنطق البرمجي

  • لتجنب المشاكل مع الخدمات الخارجية

  • لتوفير أداء أعلى دون تبعيات

  • لتسهيل النشر في بيئة الاستضافة المشتركة

📦 بنية المشروع:

نحتاج إلى:

  • Event: يمثل الحدث الذي يحدث داخل النظام

  • Listener: يتفاعل مع هذا الحدث ويرسل الإشعار

  • Notification Model: لتخزين الإشعارات في قاعدة البيانات

  • Blade Component: لعرض الإشعارات في الواجهة الأمامية

🛠️ الخطوة 1: إنشاء جدول الإشعارات

php artisan make:model Notification -m
Schema::create('notifications', function (Blueprint $table) {
    $table->id();
    $table->foreignId('user_id')->constrained()->onDelete('cascade');
    $table->string('title');
    $table->text('body')->nullable();
    $table->boolean('read')->default(false);
    $table->timestamps();
});

📣 الخطوة 2: إنشاء Event

php artisan make:event UserRegistered

في ملف UserRegistered.php:

class UserRegistered
{
    public $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }
}

🎧 الخطوة 3: إنشاء Listener

php artisan make:listener SendWelcomeNotification
public function handle(UserRegistered $event)
{
    Notification::create([
        'user_id' => $event->user->id,
        'title' => 'مرحبًا بك!',
        'body' => 'شكرًا لتسجيلك معنا في موقعنا.',
    ]);
}

🧩 ربط الحدث بالمستمع

في ملف EventServiceProvider.php:

protected $listen = [
    UserRegistered::class => [
        SendWelcomeNotification::class,
    ],
];

🚀 إطلاق الحدث

عند تسجيل المستخدم:

event(new UserRegistered($user));

👁️ عرض الإشعارات في لوحة المستخدم

@foreach(auth()->user()->notifications as $note)
    <div class="alert alert-info">
        <strong>{{ $note->title }}</strong><br>
        {{ $note->body }}
    </div>
@endforeach

✅ المميزات:

(الميزة) (الفائدة)
(لا تعتمد على أطراف خارجية) (يعمل بدون إنترنت أو خدمات مدفوعة)
(قابل للتخصيص بالكامل) (يمكنك إرسال إشعارات لأي نوع حدث)
(يسهل توسيعه) (يمكن تطويره ليشمل WebSockets لاحقًا)

💡 اقتراحات مستقبلية:

  • إضافة نظام إشعارات لحظي باستخدام Laravel Echo

  • إمكانية قراءة / عدم قراءة الإشعارات

  • لوحة تحكم للإدارة لمراجعة كافة الإشعارات في النظام

📌 الخلاصة:

إنشاء نظام إشعارات داخلي في Laravel باستخدام الأحداث والمستمعين هو حل عملي وفعال للمشاريع التي لا تحتاج تعقيد Firebase أو خدمات بث فوري.
وهو يعزز تجربة المستخدم ويزيد من احترافية التطبيق.

NameEmailMessage