اذهب إلى المحتوى

السؤال

نشر

أنا أريد أن احول   laravel public channel ل private channel  لكي تعمل مع pusher بدون  laravel echo

و هذا الكود في ملف  events/newNotification  

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

    /**
     * Create a new event instance.
     *
     * @return void
     */

    protected $user_id;
    protected $comment;
    protected $user_name;
    protected $post_id;
    protected $data;
    protected $time;
    protected $post_user_id;

    public function __construct($data = [])
    {
        $this->user_id      = $data['user_id'];
        $this->user_name    = $data['user_name'];
        $this->comment      = $data['comment'];
        $this->post_id      = $data['post_id'];
        $this->post_user_id = $data['post_user_id'];
        $this->date         = date("Y-m-d", strtotime(Carbon::now()));
        $this->time         = date("h:i A", strtotime(Carbon::now()));
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
    */

    public function broadcastOn()
    {
        return new PrivateChannel('new-notification.'.$this->post_user_id);
        
    }

}

وهذا الكود في ملف blade

 Pusher.logToConsole = true;

    var pusher = new Pusher("4fb4fa908d87ec86abf9", {
        
        
        cluster: 'eu'
    });

    var notificationsWrapper = $('.dropdown-notifications');
    var notificationsToggle = notificationsWrapper.find('a[data-toggle]');
    var notificationsCountElem = notificationsToggle.find('span[data-count]');
    var notificationsCount = parseInt(notificationsCountElem.data('count'));
    var notifications = notificationsWrapper.find('li.scrollable-container');

    // Subscribe to the channel we specified in our Laravel Event
    var channel = pusher.subscribe('private-new-notification.'+1);
    // Bind a function to a Event (the full Laravel class)
    channel.bind('App\\Events\\NewNotification', function (data) {
        var existingNotifications = notifications.html();
        var newNotificationHtml = `<a href="`+data.user_id+`"><div class="media-body"><h6 class="media-heading text-right">` + data.user_name + `</h6> <p class="notification-text font-small-3 text-muted text-right">` + data.comment + `</p><small style="direction: ltr;"><p class="media-meta text-muted text-right" style="direction: ltr;">` + data.date + data.time + `</p> </small></div></div></a>`;
        notifications.html(newNotificationHtml + existingNotifications);
        notificationsCount += 1;
        notificationsCountElem.attr('data-count', notificationsCount);
        notificationsWrapper.find('.notif-count').text(notificationsCount);
        notificationsWrapper.show();
    });
</script>

 

Recommended Posts

  • 0
نشر

القناة بالإسم : 

'new-notification.'.$this->post_user_id

بالفعل قناة خاصة Private Channel لديك , هلا قمت بتوضيح سؤالك أكثر ؟ 

اقتباس

لكي تعمل مع pusher بدون  laravel echo

يمكنك الإستغناء عن laravel ehco  إن كنت تستخدم pusher كويب سوكيت دريفر , و لا علاقة لذلك بنوع القناة .

  • 0
نشر
بتاريخ 16 دقائق مضت قال Adnane Kadri:

القناة بالإسم : 


'new-notification.'.$this->post_user_id

بالفعل قناة خاصة Private Channel لديك , هلا قمت بتوضيح سؤالك أكثر ؟ 

يمكنك الإستغناء عن laravel ehco  إن كنت تستخدم pusher كويب سوكيت دريفر , و لا علاقة لذلك بنوع القناة .

اريد تعديل الكود في ملف blade لكي يعمل مع private channel

  • 1
نشر
بتاريخ 29 دقائق مضت قال Ziyad Hasan:

اريد تعديل الكود في ملف blade لكي يعمل مع private channel

يجب أولا فهم الغرض من القنوات الخاصة أساسا , فالقنوات الخاصة في الويب سوكيت وجدت للتحقق ما ان كان سيسمح للمستخدمين بالاستماع إلى هاته القنوات الخاصة أو لا , و ذلك بالإعتماد على شروط تتوفر فيمن يقوم بطلب الإستماع مثلا أو أية شروط أخرى .

يتم تحديد قواعد ترخيص القناة الخاصة هاته بنا في ملف :

route / channels.php

الخاص بتطبيقنا . 

تحتاج أولا تعريف القناة بالملف المذكور كالتالي : 

Broadcast::channel('new-notification.{postUserId}' , function ($postUserId) {
    
});

كما أنها ستحمل شيفرة ما يتم التحقق ما إن كان للمستخدم الحالي الحق في الإستماع لأحداث هاته القناة , كأن يتم مطابقة معرف القناة الخاصة و التأكد من امتلاك المستخدم لمنشور بهذا الإسم , أو أية طريقة تحقق كانت . 

يمكنك صياغة منطق الشيفرة وفق حاجتك للقناة الخاصة من الأساس . 

مثلا : 

Broadcast::channel('new-notification.{postUserId}' , function ($postUserId) {
    if(auth()->user()->can_view_notfs_of($postUserId)){
        return true;
    }
});

بحيث سيكون هذا المسار نقطة تحقق قبل الإشتراك في القناة بالنسبة لمستخدم معين أو تحقق شرط معين . 

و هذا من جانب الواجهة الخلفية , أما من جانب الواجهة الأمامية فسيتم تحديد نقطة الوصول هاته -نقطة التحقق- بإستعمال الخاصية authEndpoint مرفقا بـ csrf_token  : 

var pusher = new Pusher("4fb4fa908d87ec86abf9", {
        cluster: '{{ env('PUSHER_APP_CLUSTER') }}',
        authEndpoint: '/broadcasting/auth',
        auth: {
             headers: {
                'X-CSRF-TOKEN': '{{ csrf_token() }}',
             }
        }
});

بعد ذلك ستعمل القنوات الخاصة وفق المطلوب .

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...