如何制作实时laravel 5.3通知

时间:2016-09-08 12:03:38

标签: php laravel laravel-5.3

我正在使用Laravel 5.3 Notifications。

我成功创建了数据库通知,以及如何向目标用户显示所有或未读的数据库通知。

例如,这是我的通知类,通知用户在课程中注册状态:

class NewChangeRegisterStatusNotif extends Notification
{
    use Queueable;


    public function __construct ($status_id, $course_id)
    {
        $this->status = CourseUserStatus::findOrFail($status_id);
        $this->course = Course::findOrFail($course_id)->first(['title']);
    }


    public function via ($notifiable)
    {
        return ['database'];
    }


    public function toMail ($notifiable)
    {
        return (new MailMessage)
            ->line('The introduction to the notification.')
            ->action('Notification Action', 'https://laravel.com')
            ->line('Thank you for using our application!');
    }


    public function toArray ($notifiable)
    {
        return [
            'message' =>
                ' Your Status in ' .
                '<strong class="text-default">' . $this->course->title . '</strong>'
                . ' Course has changed to  ' .
                '<strong class="text-' . $this->status->label . '">' . $this->status->title . '</strong>';

            ,
            'action'  => '#'
        ];
    }
}

并显示我在刀片模板中写的所有通知:

<ul class="menu">
    @foreach($AuthUser->unreadNotifications as $notif)
        <li>
            <a href="{{$notif->data['action']}}" data-notif-id="{{$notif->id}}">
                {!! $notif->data['message'] !!}
            </a>
        </li>
    @endforeach
</ul>

一切正常但现在我想做那个实时的事。

我知道我可以使用PusherPusher bridge。我安装了Pusher桥并遵循Building Real-Time Laravel Apps with Pusher指南。

但我不知道如何在我的通知中使用它?如何在via()方法中定义它以及我做什么?

1 个答案:

答案 0 :(得分:0)

现在您创建了管理通知的后端。

您在视图中所做的一切都是显示来自服务器端呈现的通知(即,在添加新页面时)。

如果您真的想要实时通知(我假设您这样做是因为您提到了推送器),您需要将服务器的通知推送到应用程序的客户端代码。

根据您提到的教程,推送服务器端使用以下代码完成:

$pusher->trigger( 'test-channel',
                  'test-event', 
                  array('text' => 'Preparing the Pusher Laracon.eu workshop!'));

在这里,您的laravel应用程序将推送消息。您所要做的就是设置您的客户端(您的javascript)以接收它并显示它。

这部分可以使用这种javascript代码完成:

var pusher = new Pusher('{{env("PUSHER_KEY")}}');
var channel = pusher.subscribe('channel-name');
channel.bind('event-name', function(data) {
    // do something with the event data
});

现在由你来做你需要的任何事情来显示那个通知。它可以像console.log一样简单,就像创建新的html元素并将它们添加到菜单中一样非常复杂。

很抱歉没有提出实际的代码,但我希望我为你做的更清楚,这样你就可以继续。