场景:客户可以将客户引荐给其他客户.
每个引用都需要存储在DB表行中.接收推荐的客户应该看到该活动的通知.

创建新的推荐并发送事件:

$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的通知栏中显示它.

我怎样才能做到这一点?

问题中显示的事件仅向该特定推荐实体的频道广播.但是,订阅此频道的接收方应接收所有引用它们的推荐实体的事件.

不是为推荐实体本身创建频道上下文,而是发布到为接收推荐的用户指定的频道.我猜$referral->包含该用户的ID:

public function broadcastOn()
{
    return new PrivateChannel('referral.' . $this->referral->to);
}

更新频道以根据接收推荐的用户的ID授权当前用户:

broadcast::channel('referral.{refereeId}',$refereeId) {
    return $user->id == $refereeId;
});

而且,在客户端,请在同一频道上收听:

window.Echo.private('referral.' + window.custom.userId)
    .listen(e => console.log(e.referral));

因为我们不再监听特定的引用ID,所以我们可以在页面加载期间而不是在AJAX响应回调中初始化Echo订阅者.

广播事件旨在用于正常请求/响应周期之外的实时操作(包括AJAX请求).在这个问题的情况下,我们希望在页面加载时为每个客户启动Echo监听器 – 而不是在特定请求之后 – 以便他们可以在其他客户将客户端引用给他们时随时接收通知.

流程如下:

>客户1和客户2都打开应用程序,在客户端启动Echo.>客户1为客户2创建推荐.>客户1的浏览器发送AJAX请求以保存引荐.> Laravel将该活动发布到Customer 2的频道.>客户2的浏览器通过Echo接收事件,Echo正在监听该频道.>您编写的用于处理该事件的代码会在Customer 2的浏览器中创建通知.

php – Laravel Echo私人频道与Laravel echo服务器| Redis的的更多相关文章

  1. 离子运行android似乎工作,但该应用程序没有在手机上启动,为什么?

    我的手机处于打开状态,处于调试模式,我已通过adbdevices-l确认了这一点.当我运行离子运行android时,我得到Ionic声称应用程序启动时的输出,但手机上没有任何反应.我使用Android4.4.4的Nexus5.androidapp中的index.html:解决方法键入离子信息并检查已安装的Cordova版本.如果你有v5.0.0现在需要一个新的插件,否则所有的http请求都被阻止.

  2. php中echo与print区别点整理

    在本篇文章里小编给大家整理的是一篇关于php中echo与print区别点,需要的朋友们可以参考下。

  3. php编程中echo用逗号和用点号连接的区别

    本文通过几个具体的例子.来认清楚php编程中echo用逗号和用点号连接之前的区别.有需要的小伙伴可以参考下

  4. 基于php中echo用逗号和用点号的区别详解

    下面小编就为大家分享一篇基于php中echo用逗号和用点号的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  5. PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码

    这篇文章主要介绍了PHP中的输出echo、print、printf、sprintf、print_r和var_dump的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  6. PHP写API输出的时用echo的原因详解

    在本篇文章里小编给大家分享了关于PHP写API输出的时用echo的原因和相关知识点,需要的朋友们参考下。

  7. PHP Echo字符串的连接格式

    这篇文章主要介绍了PHP Echo字符串的连接格式 的相关资料,需要的朋友可以参考下

  8. 浅析PHP echo 和 print 语句

    这篇文章主要介绍了PHP echo 和 print 语句的的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下

  9. PHP7 echo和print语句实例用法

    在本文中小编整理了在PHP7中echo和print语句实例用法以及相关知识点内容,需要的学习下。

  10. php echo 输出字符串函数详解

    echo()函数的作用是:输出一个或多个字符串。 这里给简单的整理下,希望对需要的朋友有所帮助。

随机推荐

  1. php – 找不到Laravel迁移表

    我正在尝试在硬盘故障后恢复项目.丢失了mysql信息,所以只需拥有项目代码即可.我希望能够通过使用artisanmigrate将我的数据库重新组合在一起,但错误消息告诉我:实际上有一种方法可以使用我的Laravel代码文件和命令行来重建我的数据库吗?谢谢您的帮助.我需要运行的命令是:

  2. php – Laravel 4 HTML图像

    我的问题是Laraval接受PNG图像或JPG旁边的任何其他格式.发生的事情是,当我将图像更改为JPG时,它可以找到它,但是一旦我将其更改为PNG,它就再也找不到图像了.我在同一个文件目录中将这个图像格式化为PNG和JPG,所以我知道它不是文件的位置.laravel在公共文件夹中搜索图像,/uploads/20230322/066c175eebe68a1157cd22d836b11b91.png

  3. php – Laravel验证:检查验证器失败的原因

    如果有办法检查验证器是否由于唯一规则而特别失败?在外行人看来,我基本上想知道:“验证失败了,因为email_address不是唯一的吗?”检查返回的失败规则数组中的特定规则

  4. php – Laravel SSH服务器未存储在配置文件中

    我有一个涉及服务器管理的项目,我需要执行一些SSH命令.在Laravel我有SSH实用程序(远程),但我必须将配置放在一个文件中.我需要从数据库中连接存储在模型中的凭据.任何想法我怎么能这样做?

  5. php – 如何在Laravel 5.2中获取url()的相对URL?

    我已经完成了搜索,但在Laravel5.2中找不到任何解决这个问题的方法.是否可以在Laravel5.2中生成相对URL?是的,您应该使用$request->path(),它将返回URI.

  6. php – laravel中URL :: to和URL :: route之间的区别

    有什么区别和我将routes.PHP定义为当我点击’Register1’时出现以下错误但是,当我点击“注册2”时,它会进入URL::route获取指向路由的URL.所以在你的情况下,如果你这样命名你的路线:那么你就可以使用了在刀片模板中.

  7. php – Laravel 5 – 根据需要验证数组,但允许传递一个空数组

    我正在使用验证器验证Laravel5.4中的请求,请参阅文档:https://laravel.com/docs/5.4/validation#validating-arrays基本上,这是Controller中的代码:我想要求字段“items”的存在,并且这个代码可以实现,但问题是当“items”字段是空数组时验证失败,即,这是一种不受欢迎的行为.我知道这是“必需”参数的记录行为,但我没有看到任何

  8. php – 找不到laravel类(适用于localhost但不适用于DO服务器)

    这是一个重复的问题–例如:Laravel4migrations–classnotfound但是,我已经尝试了所有解决方案并且无法解决这个问题.脚本我在我的本地机器上创建了一个Laravel4项目–添加了一些类,控制器,视图等–项目运行良好.然后我将这个新的repo复制到我的DO服务器上–用composer等安装依赖项.该项目看起来不错,除了一个页面发出错误:您可以查看此页面here.我试过了…

  9. php – Laravel重定向到一个路由,但随后apache给出了404错误

    这是我的最终(和工作)vhost配置:

  10. php – 如何检查laravel 4中的响应头以进行单元测试?

    我已经看到很多关于如何在响应上设置标头的示例,但我找不到检查响应标头的方法.例如,在测试用例中,我有:我如何测试内容类型标题是’application/json’还是任何其他内容类型?也许我误会了什么?我有的控制器可以使用Accept标头进行内容否定,我想确保响应中的内容类型是正确的.谢谢!在Symfony和Laravel文档中进行了一些挖掘后,我能够弄清楚…

返回
顶部