【发布时间】:2019-02-08 10:04:18
【问题描述】:
场景:客户可以将客户推荐给其他客户。 每个引用都需要存储在数据库表行中。收到推荐的客户应该会看到该事件的通知。
创建一个新的推荐并发送事件:
$totalRefers = [];
foreach ($array as $to) {
$refer = new ClientReferral;
$refer->user_id = $user_id;
$refer->by = $by;
$refer->to = $to;
$refer->save();
array_push($totalRefers, $refer);
ReferralSent::dispatch($refer); // Here is the Event
}
return response()->json([
'status' => 'Success',
'message' => 'Client referred successfully to selected professionals.',
'data' => $totalRefers
], 200);
事件broadcastOn()方法:
public function broadcastOn() {
return new PrivateChannel('referral.' . $this->referral->id);
}
频道:
Broadcast::channel('referral.{id}', function ($user, $id) {
// let's say it's true for the time being
return true;
});
并且请求是一个 Ajax POST,所以在成功回调中:
console.log('referral created');
res.data.forEach(function(entry) {
// window.custom.userId is the authenticated user ID:
if (entry.refer_to == window.custom.userId) {
window.Echo.private('referral.' + entry.id).listen('ReferralSent', ({data}) => {
console.log('You have received a new referral');
});
}
});
现在当前代码的问题是接收者无法订阅此频道,因为该事件是动态创建的,并且我无法将频道名称设为静态,因为推荐是在运行时进入的。
接收者如何订阅和收听动态事件?
通过这个逻辑,我想获取特定的推荐及其数据,以便在 HTML 的通知托盘中显示它。
我怎样才能做到这一点?
【问题讨论】:
-
1. “现在当前代码的问题是接收者无法订阅这个频道”你说的“这个频道”是什么意思? 2.“按照这个逻辑,我想得到那个特定的推荐”什么是“那个特定的推荐”? 3.“该特定推荐及其数据”包含在此数据中的哪些内容?
-
我认为您的代码没有任何问题。您拥有一切,如果您需要在前面显示额外的数据,请在回调中发送该数据,解析并显示。如果我弄错了,你能把你的问题改成简单的词吗?
标签: php laravel redis socket.io laravel-echo