问题标签 [laravel-events]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
657 浏览

php - Laravel - 事件订阅者入队 - 当订阅者方法在不同的类中时

您好优秀的开发人员,

我尝试使用This Question中的解决方案,但它没有解决我的问题,因此我将其作为一个单独的问题提出。

TL;DR- 我希望我的订阅者监听器在队列中异步执行。我的订阅者为每个事件调用不同类的方法。我试图添加implements ShouldQueue我的 SubscriberClass | 我的听众班 | 将方法重命名为handle在每个类中,但没有任何效果。它们仍然在没有队列的情况下同步执行。

我有一个事件订阅者类:TesterAPI. 我将它添加到EventServiceProvider subscribe数组中。

我有一个事件类SourceAPIEvents

TesterAPI- 订户

这是我的听众课程:

我这样称呼这些事件

帮助我了解我做错了什么。

0 投票
1 回答
1727 浏览

laravel - 带有队列的 Laravel 侦听器不执行

我试图让听众使用队列。一切都已正确设置以连接到 Redis 服务器。

事件

听众

这就是我触发事件的方式:

在偶数火灾之后,我查看了我的 Redis 存储,看看是否保存了一些东西并且它已经保存了。

1)“队列:默认:通知” 2)“队列:默认”

当我查看 queues:default 时,它具有 JSON。

{ "displayName": "App\Listeners\BillingEventListener", "job": "Illuminate\Queue\CallQueuedHandler@call", "maxTries": null, "timeout": null, "timeoutAt": null, "data": { "commandName": "Illuminate\Events\CallQueuedListener", "command": "O:36:\"Illuminate\Events\CallQueuedListener\":7:{s:5:\"class\";s:34:\" App\Listeners\BillingEventListener\";s:6:\"method\";s:6:\"handle\";s:4:\"data\";a:1:{i:0;O:23 :\"App\Events\BillingEvent\":3:{s:30:\"\u0000App\Events\BillingEvent\u0000event\";s:30:\"billing_subscription_cancelled\";s:29:\"\u0000App\ Events\BillingEvent\u0000data\";a:0:{}s:6:\"socket\";N;}}s:5:\"tries\";N;s:9:\"timeoutAt\";N;s:7:\"timeout\";N;s:6:\" \u0000*\u0000job\";N;}" }, "telescope_uuid": "8d6dcd7a-5747-41e5-84ec-082828c94ffa", "id": "hUmv4Pis9adXyBW5kLHoCAai18sFExBe", "attempts": 0 }

队列确实有效,但句柄函数中的代码永远不会被调用。当我将队列驱动程序设置为同步时,一切都会立即执行。

我在队列中获得了默认的 Redis 连接:

0 投票
1 回答
344 浏览

laravel-5.7 - Laravel - 在模型监听器中为调度事件编写异常

我有一个Product触发retrieved事件的模型和一个根据 API 路径(if-else 条件)引发异常ProductRetrieved的侦听器。CheckProductValidity

另外,我有一个我已经实现的更新查询,Console\Kernal.php它每天在 00:00 运行。

问题: CheckProductValidity为计划任务引发异常。当调度程序完成时,如何在侦听器中创建异常以允许检索模型Product数据。

可能的解决方案:使用unsetEventDispatchersetEventDispatcher有时此更新查询可能需要比平时更多的时间。此外,cron 还会发送通知和处理作业(全部取决于Product),因此可能会导致问题。

0 投票
1 回答
936 浏览

php - 有条件订阅 Laravel 中的侦听器

我已经通过添加它来设置一个监听器EventServiceProvider

listener( MyListener) 具有subscribe订阅侦听器想要侦听的事件的函数 -它工作正常


现在,我正在尝试添加一个检查来限制应该监听哪些事件。就像是

但是,添加此逻辑后我遇到了一些问题。

似乎在运行时composer install它会执行 subscribe 方法。

这会导致一个问题,因为运行时没有活动会话composer install- 所以我遇到了一个 SQL 错误 - 它找不到要在哪个数据库中搜索配置 - 然后是这个错误

脚本 @php artisan package:discover 处理返回的 post-autoload-dump 事件,错误代码为 1

如何有条件地订阅侦听器中的某些事件?

0 投票
1 回答
714 浏览

php - 在模拟单元测试时,移除队列事件侦听器上的 SerializesModels 不会生效

我目前正在使用 Laravel 的队列事件侦听器处理 Eloquent 模型的saving事件。在我的事件类上,我设置了一个包含我的模型的公共属性,然后我可以$event通过$event->myModel.

我的侦听器上的handle()方法将旧值与新值进行比较,因此我Illuminate\Queue\SerializesModels在事件类中删除了。这很好用,我现在可以比较新值中的旧值。

问题在于测试。我正在做一个测试,检查我在侦听器方法中得到的新旧值handle()是否不同。但是,$event->myModel->getOriginal()现在返回一个空数组。这仅在测试时发生。

这是一个错误吗?

我尝试public $originalModelProps在我的事件类上设置 a 但是,当调用我的侦听器上的 handle() 方法时它返回空。

我没有使用或在我的代码中Illuminate\Queue\SerializesModels命名的任何特征/类/接口。SerializesModels

事件/模型/MyModel/MyModelSavedEvent.php

Listeners/Models/MyModel/MyModelSavedEventListener.php

测试/app/Listeners/Models/MyModel/MyModelSavedEventListener.php

我期待类似于它在测试之外的工作方式,我将能够比较旧值和新值。

编辑: 事件是通过 MyModel 的$dispatchesEvents属性触发的:

更新:发现我的模型确实没有被序列化。只是在侦听器的方法getOriginal()中调用时仍然返回一个空数组handle()

0 投票
3 回答
2834 浏览

laravel - 如果在 Laravel 中广播事件,如何测试/断言

我正在开发一个 Laravel 应用程序。我在我的应用程序中使用 Laravel 广播。我现在要做的是尝试测试是否在 Laravel 中广播了一个事件。

我正在广播这样的事件:

我想测试是否广播了该事件。我该如何测试它?我的意思是在单元测试中。我想做类似的事情

附加信息

该事件在创建项目时触发的观察者事件中广播。

0 投票
1 回答
1008 浏览

laravel - Laravel 单元测试是否在触发 eloquent 模型事件时触发事件

我正在开发一个 Laravel 应用程序并在此过程中编写测试。现在,我在编写一个测试时遇到问题,该测试断言在触发 eloquent 模型事件时是否触发了事件。这就是我正在做的事情。

这是我的 ItemObserver 创建的函数

如您所见,我在雄辩的模型观察者的创建事件中触发了一个事件。

如果我想断言是否在测试中触发了事件,我必须伪造事件然后断言类似这样的东西。

正如您在测试代码中看到的那样,我试图断言是否在创建项目时触发了事件。但是测试永远不会通过,因为观察者类的创建函数永远不会被调用,因为事件是在测试中伪造的。我该如何测试这种情况?

0 投票
3 回答
1590 浏览

laravel - 如何将自定义事件添加到 Laravel 模型

我有付款模式,想在付款确认后触发自定义事件。

我的型号代码:

0 投票
2 回答
34 浏览

laravel - 将经过身份验证的用户添加到相关模型的最佳方法是什么?

将经过身份验证的用户添加到相关模型的最佳方法是什么?

如果我想在创建新帖子时将经过身份验证的用户添加为帖子模型的作者,那么最好的方法是什么?

目前,我有以下工作,但它运行一个额外的查询(即 1. 创建帖子。2. 使用 author_id 更新帖子)。

必须有更好的方法来做到这一点。我正在考虑手动添加所有属性,使用$post-author_id = $request→user()→id,然后调用$post-save(). 但是,我不喜欢手动写出帖子的所有其他属性的想法。

我在想的另一个选择是在 Post 创建事件上创建一个事件侦听器。我不知道这是否会减少对额外查询的需求。

什么是最简单的解决方案?

0 投票
0 回答
400 浏览

pusher - Pusher 私人聊天适用于本地主机,不适用于实时服务器

我使用 laravel 和 Vue 开发了一个聊天系统。我正在使用推送器进行实时通信。一切都在本地主机上运行良好。但是在推送到实时服务器(共享主机)时,聊天不起作用。推送器调试的错误是:无法广播客户端事件(连接未订阅通道 private-chat1)。 但是,可以在调试控制台上看到该消息。

问题:

  • 共享主机是否与聊天应用程序失败有关?SSL 有影响吗?(域安装了 ssl)我还能检查什么。确实尝试过故障排除。