Я пытаюсь реализовать функцию уведомлений на своем веб-сайте. Вот мой код (надеюсь, мой подход правильный)
-создайте канал под названием уведомление. {userId} (userId – это идентификатор пользователя, прошедшего проверку подлинности) -когда я, например, комментирую его сообщение, запускайте событие NewComment, которое транслируется в уведомлениях.{$notification-> идентификатор_пользователя
вот мой код:
public function newComment($post, $user){
$notification = new Notification; // this is notification model for my database table
$notification->type = 'new-comment';
$notification->notified_by = $user->id;
$notification->user_id = $post->owner->id;
$notification->save();
event(new NewNotification($notification));
}
Событие NewNotification.php
<?php
namespace App\Events;
use App\Models\Notification;
use App\Transformers\NotificationTransformer;
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 NewNotification
{
protected $notification;
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Notification $notification)
{
$this->notification = $notification;
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new PresenceChannel('notification.' . $this->notification->user_id);
}
public function broadcastWith(){
return fractal()->item($this->notification, new NotificationTransformer());
}
}
Маршрут канала трансляции:
Broadcast::channel('notification.{userId}', function($user, $userId){
//comparing ($userId == $user->id) always turns true
});
Подписка на канал присутствия на стороне клиента (с помощью Vue):
Echo.join('notification.' + this.user_id) //user_id is logged in user id
.listen('NewNotification', function(response){
console.log(response);
});
По какой-то причине событие никогда не вызывается. Я не знаю, должен ли я изменить логику в маршруте широковещательного канала. Должен ли я передать идентификатор уведомления и проверить, есть ли уведомление->user_id === $user->id . Я тестировал этот способ, но все еще не ответил в консоли.