我正在使用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>
一切正常但现在我想做那个实时的事。
我知道我可以使用Pusher和Pusher bridge。我安装了Pusher桥并遵循Building Real-Time Laravel Apps with Pusher指南。
但我不知道如何在我的通知中使用它?如何在via()
方法中定义它以及我做什么?
答案 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元素并将它们添加到菜单中一样非常复杂。
很抱歉没有提出实际的代码,但我希望我为你做的更清楚,这样你就可以继续。