如何让用户根据他们所在的组订阅 Pusher Channel?

How can I get a user to subscribe to a Pusher Channel based on the group they are in?

每个用户都放在一个组里,我的站点有5个组。我只想将 X 组中的事件广播给 X 组中的客户。如何创建这样的频道并让客户订阅它们?

Pusher.logToConsole = true;

        var pusher = new Pusher('ec160cc0a1ca15e463f4', {
            cluster: 'eu',
            forceTLS: true
        });

        var channel = pusher.subscribe("{{Player::where('user_id', Auth::user()->id)->first()->group_id}}");
        channel.bind('NewPurchase', function(data){
            window.alert('successful!');
        });

不过我在后台创建这些自定义组很好

public function broadcastOn()
    {
        return [Player::where('user_id', $this->product->seller_id)->first()->group_id];
    }

我一直收到 'Class Player not found',也许是因为我那里的 php 似乎没有人阅读?

因为Player是一个模型,通过全限定名实例化它

var channel = pusher.subscribe("{{\App\Player::where('user_id', Auth::user()->id)->first()->group_id}}");
public function broadcastOn()
{
   return [App\Player::where('user_id', $this->product->seller_id)->first()->group_id];
}

"The broadcastOn method should return a channel or array of channels that the event should broadcast on. The channels should be instances of Channel, PrivateChannel, or PresenceChannel."

var channel = pusher.subscribe("{{Player::where('user_id', Auth::user()->id)->first()->group_id}}");

因此,如果您在使用 Class 时遇到问题,您可以将参数添加到事件中。它应该是这样的:

class YourEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;
    public $group_id;

    public function __construct($group_id)
    {
        $this->group_id= $group_id;
    }

    public function broadcastOn()
    {
        return new Channel($this->group_id);
    }
}

并调用事件:

event(new YourEvent(Player::where('user_id', Auth::user()->id)->first()->group_id));