laravel - Laravel - 我可以将事件绑定到通知吗?
问题描述
首先,我将描述上下文。我有很多关于 , 中的更改的
通知。它们在控制器的许多地方被触发。
现在我正在实现一个扩展的缓存,并且我想创建一个事件,在该事件中特定商品的缓存将被重新加载。首先,我想在事件中触发这些通知,但我意识到要让它工作,我必须复制每个通知。
例如,假设我有事件( new OfferEdited() )。它的侦听器将是RefreshCacheForOffer、SendNotificationsAboutOfferEdit等。对于我需要创建侦听器的每个通知Offer
for example: offerEditedBySeller, offerEditedByAdmin, offerTurnOff, etc
OfferChange
offerEdited
SendNotificationsAboutOfferEdit
,这只会触发特定的通知。我认为这不是我想要达到的。
有没有办法将事件/侦听器与通知绑定?不管它是offerEdited
,offerApproved
还是offerDisapproved
与事件绑定OfferChange
,这将触发监听器RefreshCacheForOffer
和接下来的特定作业。这样我就不必更改每个控制器操作中的代码并创建许多不必要的事件和侦听器。可能吗?
编辑:
我知道我可以这样做:
$user->notify(new offerEdited($offer));
event( new OfferChange($offer) );
但我希望有一种方法可以更好地组织它。
解决方案
为避免更改控制器中的大量代码,您可以在模型中对其进行建模并获取模型的“创建”或“更新”事件,然后调用后续事件。
class Offer extends Model
{
protected static function booted()
{
static::updated(function ($user) {
// check for condition and trigger event such as OfferEditedBySeller
});
}
}
如果您想使用事件/侦听器架构,那么我认为一个事件和侦听器永远通知是您必须采用的方式。
或者,不要打扰事件/侦听器 - 只需从控制器或模型的“创建”或“更新”事件发送通知。去掉中间人(事件/监听器),你将拥有更明确的代码,更容易理解。
当您需要解耦和抽象时,事件/侦听器很好 - 但如果您正在做明确的事情,那么不使用它们可能对您来说更简单。
推荐阅读
- python - Pandas 多列交叉点忽略 na 值
- ajax - 如何根据条件执行(或不执行)ajax 调用
- php - JSON 是什么类型的,如何用 php 解析它?
- javascript - 反应:传入我的onClick函数时无法读取未定义的属性
- ios - 将 12 个 ARFrame 添加到 Array (iOS/Swift) 后 ARSCNView 冻结
- javascript - 注册组件vue js
- java - 如何在 slf4j 中格式化异常?
- webpack - 如何更改 vue.js 应用程序中的 lint 目录?
- mysql - 优化 SQL 查询“SELECT”
- java - Selenium 测试在成功执行测试后抛出错误