RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 634562
Accepted
Shadow33
Shadow33
Asked:2020-03-02 20:22:01 +0000 UTC2020-03-02 20:22:01 +0000 UTC 2020-03-02 20:22:01 +0000 UTC

实时用户通知。拉维尔 5.3

  • 772

需要实时通知用户系统中的事件。

用作laravel 5.3的基础。但是我不知道如何正确地组织它以及为此需要什么。请告诉我如何构建这样一个系统。也许我看错了方向,但到目前为止我发现的只是 laravel中的事件

2种类型的通知:

  1. 信件
  2. 正面以带有文本的窗口形式显示消息。
php
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Best Answer
    Konstantin Soroka
    2020-03-03T17:37:01Z2020-03-03T17:37:01Z

    简而言之,抽象,添加检查信息出现的方法,您需要发出通知。例如

    public function newMessage()
        {
          // проверяем...
          //если есть новое
          setcookie("newMessage", $count, time() + 86400);
                    return 'yes';
          //если нет
            return 'no';
                    
        }

    将路由添加到此方法。在前端使用 ajax 监听这些 cookie。

    <script>
    +        function newMsg(data, d){if(data == "yes"){
    +            $('.new-msg').css('display', 'block');
    +        }}
    +        setInterval(function(){
    +            $.ajax({
    +                url: "/new-message",
    +                type: "POST",
    +                data: ({popupMsg: "go"}),
    +                dataType: "html",
    +                success: newMsg
    +            });
    +        },300000) 
     </script>

    像这样的东西......

    • 4
  2. TheMY3
    2020-03-09T23:45:08Z2020-03-09T23:45:08Z

    我做了和自己类似的事情,实现如下:

    1. 通知电子邮件、短信等 最好的方法是通过 5.3 版本中引入的新功能:Laravel 通知

    如果将来您不仅想要电子邮件通知,请查看网站 - http://laravel-notification-channels.com/有很多通知渠道。

    1. 浏览器中的通知也最好通过 5.3 版中的新功能实现:事件广播

    让我们从选择事件广播的驱动程序开始,我将以Pusher为例向您展示。

    首先,让我们更改 .env 文件:

    BROADCAST_DRIVER=pusher
    
    PUSHER_APP_ID=#данные с панели Pusher
    PUSHER_KEY=#данные с панели Pusher
    PUSHER_SECRET=#данные с панели Pusher
    

    通过 Composer 下载包:

    composer require pusher/pusher-php-server
    

    Pusher 目前就这些,最后我们将再次回到它。

    我们创建一个事件,(示例和描述在这里)例如,当有人写信给用户时,我们将发送通知。通知对象看起来像这样:

    <?php
    
    namespace App\Events;
    
    use Illuminate\Broadcasting\Channel;
    use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
    use Illuminate\Queue\SerializesModels;
    
    class ChatMessageSend implements ShouldBroadcast
    {
        use SerializesModels;
    
        /**
        * @var User
        */
        public $user;
    
        /**
         * @var array
         */
        public $data;
    
        /**
         * Create a new event instance.
         * @param array $data
         */
        public function __construct(User $user, array $data)
        {
            $this->user = $user;
            $this->data = $data;
        }
    
        /**
         * Get the channels the event should broadcast on.
         *
         * @return Channel|array
         */
        public function broadcastOn()
        {
            return ['chat-channel'];
        }
    
        public function broadcastAs()
        {
            return 'message-received';
        }
    }
    

    事件广播需要 broadcastOn 和 broadcastAs 方法,您还需要为此事件创建一个监听器,以便发送电子邮件消息和其中的其他消息。

    现在您需要创建一个邮件通知,我们在其中指定信件模板,链接中提供了一个示例,我们将其称为 MessageSend。

    接下来,您需要创建一个将触发此通知的监听器:

    <?php
    
    namespace App\Listeners;
    
    use App\Events\ChatMessageSend;
    use App\Notifications\MessageSend;
    
    class SendChatMessageNotification
    {
        /**
         * Create the event listener.
         */
        public function __construct()
        {
            //
        }
    
        /**
         * Handle the event.
         *
         * @param  ChatMessageSend  $event
         * @return void
         */
        public function handle(ChatMessageSend $event)
        {
            $event->user->notify(new MessageSend($event->data));
        }
    }
    

    现在我们EventServiceProvider将在文件中绑定事件和侦听器:

    protected $listen = [
        'App\Events\ChatMessageSend' => [
            'App\Listeners\SendChatMessageNotification',
        ],
    ];
    

    现在一切都准备好发送通知了。要发送通知,您需要触发一个事件:

    event(new ChatMessageSend($user, $data));
    

    信件去了邮件,又去了Pusher服务,但是现在我们需要在浏览器中显示,Pusher网站上有不同语言的例子,我给JS展示一下:

    <!DOCTYPE html>
    <head>
      <title>Pusher Test</title>
      <script src="https://js.pusher.com/4.0/pusher.min.js"></script>
      <script>
    
        // Enable pusher logging - don't include this in production
        Pusher.logToConsole = true;
    
        var pusher = new Pusher('key', {
          cluster: 'eu',
          encrypted: true
        });
    
        var channel = pusher.subscribe('chat-channel');
        channel.bind('message-received', function(data) {
          alert(data.data);
        });
      </script>
    </head>
    

    代替警报,编写自己的 JS 用于浏览器中的通知。

    PS 代码应该可以工作,但我可能在某处遗漏了一些东西

    • 3

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5