Текущий пользователь получает Broadcast Event даже с помощью метода toOthers () с Laravel 6 - PullRequest
0 голосов
/ 21 февраля 2020

Вы когда-нибудь использовали трансляцию с помощью метода 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" получают уведомление.

Почему текущий пользователь также получает уведомление с мероприятия?

Что я пропустил?

...