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_id
、user_id
、some_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-授权回调