Laravel-是否可以传递object|array参数来验证privatechannel中的广播



UserController.php

event(new MyEvent($MyObject));

MyEvent.php

public function broadcastOn()
{
return new PrivateChannel('check-validity.'.$this->MyObject);
}

channels.php

Broadcast::channel('check-validity.{MyObject}', function ($user, $MyObject) {
$sameMyObject = MyModel::where('some_id', $MyObject->some_id)
->where('state', 1000)
->where('user_id', $user->id)
->where('some_other_id', $MyObject->some_other_id)
->first();
if($sameMyObject)
{
return true;
}
});

我有一个名为MyTable的表作为例子,它有一些列。比较重要的有:some_iduser_idsome_other_id。当一个用户触发event(new MyEvent($MyObject))时,$MyObject的内容是他自己的对象,但我想在Broadcast::channel('check-validity...中检查的是,另一个用户在MyTable中是否有相同的行,但有一些差异,可能是->where('state', 1000)。如果有,那么只发送给该用户(为该用户进行身份验证的概念(。

现在我的问题是,是否可以将object|array传递给Broadcast::channel?如果是,我如何在Echo中传递其他用户关于此$MyObject的数据?我之所以这么问,是因为在此之前,我可以传递其他用户数据,这些数据只有user_id,我制作了一个html标记,并获得了通过通道传递它的值:window.Echo.private('valid-user.' + user_id),但现在不是user_id,我不知道如何传递MyObject内容以进行身份验证,因为应该设置这些sql多个条件。

谢谢:(

为什么不尝试像那样序列化数组

$a= array("john" => 120,"dave" => 342,"joe" => 553);
print_r($a);
echo "<br/>";
$b=serialize($a);
echo $b."<br/>";
$c=unserialize($b);
print_r($c);

但要发送model,请执行此

use AppOrder;
Broadcast::channel('order.{order}', function ($user, Order $order) {
return $user->id === $order->user_id;
});

https://laravel.com/docs/5.8/broadcasting#defining-授权回调

最新更新