Вы когда-нибудь использовали трансляцию с помощью метода toOthers ()?
Мое приложение использует это, и событие транслируется нормально.
Проблема: оно передает событие также текущему пользователю.
Событие генерируется в PresenceChannel с именем onlineUsers, а в классе событий используется также черта InteractsWithSockets. Я добавил $ this-> dontBroadcastToCurrentUser (); на всякий случай в конструкторе класса, но теперь у меня заканчиваются идеи.
Я использую Laravel 6.8.
Вот мой слушатель, из которого вызывается трансляция:
namespace App\Listeners\Auth;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Auth\Events\Login;
use Illuminate\Support\Facades\Notification;
use App\User;
class LogSuccessfulLogin implements ShouldQueue
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
}
/**
* Handle the event.
*
* @param object $event
* @return void
*/
public function handle(Login $event)
{
$logged_user = User::find($event->user->id);
// Notify connected users within website
$message = $logged_user->first_name." just logged in";
broadcast(new \App\Events\NewLoginUserMessage($message))->toOthers();
}
}
Вот класс события:
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 NewLoginUserMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($message)
{
$this->message = $message;
$this->dontBroadcastToCurrentUser();
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PresenceChannel('onlineUsers');
}
/**
* Get the data to broadcast.
*
* @return array
*/
public function broadcastWith()
{
return ['message' => $this->message];
}
}
Все пользователи в канале присутствия "onlineUsers" получают уведомление.
Почему текущий пользователь также получает уведомление с мероприятия?
Что я пропустил?