无法在Laravel中广播通知 [英] Unable to broadcast Notification in Laravel

查看:99
本文介绍了无法在Laravel中广播通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用推送器通知系统来使用网络套接字来更新当前页面,并显示消息您有新的通知".响铃图标指示未读通知的数量.我注册了事件和侦听器,并实现了 ShouldBroadcase 并连接了所有内容.但是我没有收到任何消息.并且除非页面重新加载,否则,我不会.还有未读的通知.

I am trying to use Pusher Notificaiton system to use web sockets to update the current page with the message "YOu have a new Notification" and the bell icon indicating the number of unread notifications. I registered the Events and Listeners and have implemented ShouldBroadcase and connected everything. But I am not getting any message. And unless the page reloads, I am not getting the no. of unread notifications as well.

这是我的密码

事件

<?php

namespace App\Events;

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

class NewNotificationEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;
        protected $data;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $data = $this->data;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return ['my-channel'];
    }
    public function broadcastAs()
    {
      return 'my-event';
    }
}

监听器

<?php

namespace App\Listeners;

use App\Events\NewNotificationEvent;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use DB;
use Illuminate\Support\Facades\Auth;

class NewNotificationListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  NewNotificationEvent  $event
     * @return void
     */
    public function handle(NewNotificationEvent $event)
    {
        $users = Auth::user();
        DB::select('CALL notification_tbl(?)',array($users->id));   
    }
}

控制器

 if(Gate::allows('manage-users')){
      $userid = $request->userid;
      $notf = $request->notf;
      $priority = $request->priority;

       DB::table('notifications')->insert(['user_id'=>$userid,'notf_message'=>$notf,'priority'=>$priority]);
        $data = array(
        'userid'=>$userid,
        'priority'=>$priority,
        'notf_message'=>$notf,
          
       );

       event (new NewNotificationEvent($data));
       // DB::select('CALL notification_tbl(?)',array($userid));
       return response()->json([
           'success'=>true,
           'msg'=>"User Notified",
       ]);

       
     }
         abort(403, "This Page is only available for Admin");
    }
}

从后端(后端控制器)发送的通知

 public function sendNotf(Request $request){
     if(Gate::allows('manage-users')){
      $userid = $request->userid;
      $notf = $request->notf;
      $priority = $request->priority;

       DB::table('notifications')->insert(['user_id'=>$userid,'notf_message'=>$notf,'priority'=>$priority]);
       DB::select('CALL notification_tbl(?)',array($userid));
        $data = array(
        'userid'=>$userid,
        'priority'=>$priority,
        'notf_message'=>$notf,
        );

       // event (new NewNotificationEvent($data));
       

       return response()->json([
           'success'=>true,
           'msg'=>"User Notified",
       ]);
    }
         abort(403, "This Page is only available for Admin");
    }

JS代码(在常用的刀片页面中-包含导航栏且每隔一页包含的页面)

JS Code (Available in the common blade page- the one which includes the Navbar and is included in every other page)

<script src="https://js.pusher.com/7.0/pusher.min.js"></script>
  <script>

    // Enable pusher logging - don't include this in production
    Pusher.logToConsole = true;

    var pusher = new Pusher('be850f6784915a1d43b8', {
      cluster: 'ap2'
    });

    var channel = pusher.subscribe('user-channel');
    channel.bind('user-channel', function(data) {
      alert(JSON.stringify(data));
    });
  </script>

推荐答案

首先,通过 php artisan make:notification exNotification

然后在 toBroadcast 函数

        return (new BroadcastMessage([
               //
        ]))

最终使用

$user->notify(new exNotification());

此外,您可以在 User 模型

    public function receivesBroadcastNotificationsOn()
    {
        return 'user.'.$this->id;
    }

有关更多详细信息,请访问:通知

for more detail please visit : Notifications

这篇关于无法在Laravel中广播通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆