الموقع حالياً تحت التطوير (Beta) 🚀. قد تلاحظ بعض التغييرات أو مميزات قيد العمل.
لارافيل درس تعليمي

إتقان Laravel Echo: تواصل فوري في تطبيقات Laravel الخاصة بك

Admin User
Admin User
May 17, 2026
6 دقيقة قراءة

Key Takeaways

  • # إتقان Laravel Echo: تواصل فوري في تطبيقات Laravel الخاصة بك
  • في مشهد الويب الديناميكي اليوم، لم تعد الميزات في الوقت الفعلي مثل الإشعارات المباشرة وتطبيقات ال...

إتقان Laravel Echo: تواصل فوري في تطبيقات Laravel الخاصة بك

في مشهد الويب الديناميكي اليوم، لم تعد الميزات في الوقت الفعلي مثل الإشعارات المباشرة وتطبيقات الدردشة ولوحات التحكم التفاعلية رفاهية بل أصبحت توقعات. توفر Laravel، ببيئتها القوية، حلاً أنيقًا لبناء هذه الميزات: Laravel Echo.

Laravel Echo هي مكتبة JavaScript تجعل من السهل بشكل لا يصدق الاشتراك في القنوات والاستماع إلى الأحداث التي تبثها تطبيق Laravel الخاص بك. إنها تعمل كغلاف من جانب العميل حول WebSockets، مما يسمح لك بالتفاعل مع الأحداث من جانب الخادم مباشرة في تطبيق الواجهة الأمامية الخاص بك دون الحاجة إلى الاستقصاء المستمر (polling).

سيرشدك هذا البرنامج التعليمي الشامل خلال إعداد واستخدام Laravel Echo لإضافة إمكانيات الوقت الفعلي إلى مشاريع Laravel الخاصة بك.

1. المتطلبات الأساسية #

قبل أن نبدأ، تأكد من توفر ما يلي:

  • مشروع Laravel يعمل (يوصى بالإصدار 8 أو أعلى).
  • Node.js و npm (أو Yarn) مثبتين على جهازك.
  • Composer مثبت عالمياً.
  • فهم أساسي لأحداث وقوائم انتظار Laravel.
  • مشغل/خدمة WebSocket (مثل Pusher، Ably، أو حل مستضاف ذاتياً مثل Redis مع Laravel WebSockets).

2. إعداد البث في Laravel #

يتكامل نظام البث في Laravel بسلاسة مع Echo. أولاً، نحتاج إلى تهيئة الواجهة الخلفية (Backend).

2.1. تهيئة مشغل البث (Broadcast Driver) #

افتح ملف .env وقم بتعيين BROADCAST_DRIVER. لهذا البرنامج التعليمي، سنستخدم Pusher، وهو خيار شائع وسهل البدء. إذا كنت تفضل ذلك، يمكنك استخدام Ably، Redis (مع حزمة laravel-websockets)، أو مشغل مخصص.

BROADCAST_DRIVER=pusher

PUSHER_APP_ID=your-pusher-app-id
PUSHER_APP_KEY=your-pusher-app-key
PUSHER_APP_SECRET=your-pusher-app-secret
PUSHER_APP_CLUSTER=your-pusher-app-cluster

استبدل القيم النائبة ببيانات اعتماد Pusher الفعلية الخاصة بك، والتي يمكنك الحصول عليها عن طريق إنشاء حساب مجاني على Pusher.com.

2.2. تثبيت Pusher PHP SDK #

إذا كنت تستخدم Pusher، فقم بتثبيت Pusher PHP SDK عبر Composer:

composer require pusher/pusher-php-server

بالنسبة لـ Ably، ستكون composer require ably/ably-php.

2.3. إلغاء التعليق عن مزود خدمة البث (Broadcast Service Provider) #

في config/app.php، تأكد من إلغاء التعليق عن App\Providers\BroadcastServiceProvider::class. يسجل هذا المزود مسارات البث وعمليات رد الاتصال الخاصة بالتصريح.

// config/app.php
'providers' => [
    // ...
    App\Providers\BroadcastServiceProvider::class,
],

3. تثبيت وتهيئة Laravel Echo #

الآن، لنقم بإعداد مكتبة JavaScript من جانب العميل.

3.1. تثبيت Echo وعميل WebSocket #

قم بتثبيت Laravel Echo وعميل WebSocket الذي اخترته (مثل pusher-js لـ Pusher، ably لـ Ably، أو لا شيء إذا كنت تستخدم laravel-websockets مع المشغل الافتراضي).

npm install --save-dev laravel-echo pusher-js
# أو لـ Ably:
npm install --save-dev laravel-echo ably

3.2. تهيئة Echo في bootstrap.js #

افتح resources/js/bootstrap.js (أو resources/js/app.js إذا كنت تفضل وضعه هناك) وقم بإلغاء التعليق عن/إضافة تهيئة Laravel Echo. تأكد من تحديثه باستخدام BROADCAST_DRIVER وبيانات الاعتماد الخاصة بك.

// resources/js/bootstrap.js

import Echo from 'laravel-echo';

import Pusher from 'pusher-js';
window.Pusher = Pusher;

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: import.meta.env.VITE_PUSHER_APP_KEY, // أو process.env.MIX_PUSHER_APP_KEY لـ Mix
    cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1',
    forceTLS: true
});

// إذا كنت تستخدم Laravel Mix بدلاً من Vite، استخدم process.env.MIX_...
// key: process.env.MIX_PUSHER_APP_KEY,
// cluster: process.env.MIX_PUSHER_APP_CLUSTER,

إذا كنت تستخدم Vite، فتأكد من أن متغيرات .env الخاصة بك مسبوقة بـ VITE_.

3.3. تجميع الأصول (Assets) #

قم بتجميع أصول الواجهة الأمامية الخاصة بك للتأكد من تضمين Echo في حزمة JavaScript الخاصة بتطبيقك:

npm run dev
# أو للإنتاج:
npm run build

تأكد من أن تخطيط Blade الخاص بك يتضمن resources/js/app.js أو ما شابه ذلك.

<head>
    <!-- ... -->
    @vite('resources/js/app.js') <!-- إذا كنت تستخدم Vite -->
    <!-- أو <script src="{{ mix('js/app.js') }}"></script> إذا كنت تستخدم Mix -->
</head>

4. بث الأحداث من Laravel #

الآن بعد أن تم إعداد Echo، لنقم بإنشاء حدث وبثه.

4.1. إنشاء حدث #

أنشئ حدثاً جديداً باستخدام أمر Artisan:

php artisan make:event OrderShipped

4.2. تنفيذ ShouldBroadcast #

افتح فئة الحدث OrderShipped وقم بتنفيذ واجهة ShouldBroadcast. يخبر هذا Laravel ببث هذا الحدث.

// app/Events/OrderShipped.php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class OrderShipped implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $orderId;
    public $userName;

    /**
     * إنشاء مثيل حدث جديد.
     *
     * @return void
     */
    public function __construct($orderId, $userName)
    {
        $this->orderId = $orderId;
        $this->userName = $userName;
    }

    /**
     * الحصول على القنوات التي يجب أن يُبث الحدث عليها.
     *
     * @return array<int, \Illuminate\Broadcasting\Channel>
     */
    public function broadcastOn(): array
    {
        return [
            new Channel('orders'), // قناة عامة (Public Channel)
            // new PrivateChannel('users.' . $this->userId), // مثال قناة خاصة (Private Channel)
        ];
    }

    /**
     * اسم بث الحدث.
     *
     * @return string
     */
    public function broadcastAs(): string
    {
        return 'order-shipped';
    }
}
  • ShouldBroadcast: الواجهة الأساسية التي تحدد الحدث للبث.
  • $orderId, $userName: خصائص عامة سيتم تسلسلها وتوفيرها للمستمع في الواجهة الأمامية.
  • broadcastOn(): تحدد القنوات التي سيبث هذا الحدث عليها. هنا، نستخدم قناة عامة Channel('orders').
  • broadcastAs(): (اختياري) تخصيص اسم الحدث الذي سيستمع إليه Echo. إذا تم حذفه، سيستمع Echo إلى اسم الفئة (مثال: App.Events.OrderShipped).

4.3. إرسال الحدث #

يمكنك إرسال هذا الحدث من أي مكان في تطبيق Laravel الخاص بك، على سبيل المثال، من وحدة تحكم أو خدمة:

// app/Http/Controllers/OrderController.php

namespace App\Http\Controllers;

use App\Events\OrderShipped;
use Illuminate\Http\Request;

class OrderController extends Controller
{
    public function shipOrder(Request $request, $orderId)
    {
        // منطق شحن الطلب...
        $userName = $request->user()->name ?? 'Guest';

        event(new OrderShipped($orderId, $userName));

        return response()->json(['message' => 'تم شحن الطلب وبث الحدث!']);
    }
}

5. الاستماع إلى الأحداث باستخدام Laravel Echo #

الآن، لنقم بإعداد الواجهة الأمامية للاستماع لحدث OrderShipped.

5.1. القنوات العامة (.channel(), .listen()) #

القنوات العامة مفتوحة للجميع. لا يلزم أي تصريح. في ملف JavaScript (مثال: مكون Vue، سكريبت JS عادي، أو مباشرة في app.js):

// resources/js/app.js أو طريقة مكون Vue

// تأكد من تهيئة Echo قبل الاستماع
if (typeof window.Echo !== 'undefined') {
    window.Echo.channel('orders')
        .listen('order-shipped', (e) => {
            console.log('تم استلام حدث شحن الطلب:', e);
            alert(`تم شحن الطلب رقم #${e.orderId} بواسطة ${e.userName}!`);
            // تحديث الواجهة هنا
        });

    console.log('يتم الاستماع لأحداث order-shipped على قناة 

FAQs

ما هو استخدام Laravel Echo؟
Laravel Echo هي مكتبة JavaScript تبسط دمج الوظائف في الوقت الفعلي في تطبيقات Laravel. تسمح لواجهة المستخدم الخاصة بك بالاشتراك في القنوات والاستماع إلى الأحداث التي تبث من الواجهة الخلفية لـ Laravel، مما يتيح ميزات مثل الإشعارات المباشرة والدردشة ولوحات التحكم الديناميكية.
كيف أقوم بإعداد Laravel Echo مع Pusher؟
لإعداد Laravel Echo مع Pusher، تحتاج إلى تهيئة `BROADCAST_DRIVER=pusher` في ملف `.env` الخاص بك، وتثبيت `pusher/pusher-php-server` عبر Composer، ثم تثبيت `laravel-echo` و`pusher-js` عبر npm. أخيراً، قم بتهيئة `window.Echo` في `resources/js/bootstrap.js` باستخدام مفتاح تطبيق Pusher ومجموعته (cluster).
ما هي أنواع القنوات المختلفة في Laravel Echo؟
تدعم Laravel Echo ثلاثة أنواع رئيسية من القنوات: القنوات العامة (`.channel()`) للبث المفتوح، والقنوات الخاصة (`.private()`) للمستخدمين المصرح لهم، وقنوات الوجود (`.join()`) وهي نوع من القنوات الخاصة التي تتبع أيضًا وتوفر معلومات حول من يشترك حاليًا.
هل يمكنني استخدام Laravel Echo بدون Pusher أو Ably؟
نعم، يمكن استخدام Laravel Echo بدون Pusher أو Ably. يمكنك استخدام حل WebSocket مستضاف ذاتياً مثل `laravel-websockets` (الذي يعمل مع Redis للتوسع) عن طريق تهيئة `BROADCAST_DRIVER` الخاص بك إلى `redis` والتأكد من أن تهيئة Echo تشير إلى خادم WebSocket المخصص الخاص بك.

Want more content like this?

Explore more tutorials in the لارافيل section.

Explore لارافيل

You might also like

لارافيل
6 دقيقة قراءة

بايبر (Piper): إطلاق قوة مصفوفات وسلاسل لارافيل في PHP الخالصة باستخدام عامل الأنبوب

تُعد أساليب التعامل مع المصفوفات والسلاسل النصية بمرونة في لارافيل متعة حقيقية، حيث توفر طرقًا موجزة ومقروءة لتحويل البيانات. ماذا لو كان بإمكانك جلب نفس هذه ال...

May 23, 2026
اقرأ