Laravel - 我可以将事件绑定到通知吗?
Laravel - can I bind an event to a notification?
首先,我将描述上下文。
我有很多通知涉及 Offer
、for example: offerEditedBySeller, offerEditedByAdmin, offerTurnOff, etc
中的更改。它们在控制器中的许多地方被触发。
现在我正在实施一个扩展的缓存,我想创建事件 OfferChange
,在该事件中将重新加载特定商品的缓存。首先,我想在事件中触发这些通知,但我意识到要让它工作,我必须复制每个通知。
例如,假设我有 事件 ( new OfferEdited() )。它的侦听器将是 RefreshCacheForOffer、SendNotificationsAboutOfferEdit 等。对于像 offerEdited
这样的每个通知,我需要创建侦听器 SendNotificationsAboutOfferEdit
,这只会触发特定的通知。我想这不是我想要达到的。
有没有办法将 events/listeners 与通知绑定?无论它是 offerEdited
、offerApproved
还是 offerDisapproved
,它都会与事件 OfferChange
绑定,这将触发侦听器 RefreshCacheForOffer
和特定作业下一个。这样我就不必更改每个控制器操作中的代码并创建大量不必要的事件和侦听器。可能吗?
编辑:
我知道我可以做到:
$user->notify(new offerEdited($offer));
event( new OfferChange($offer) );
但我希望有更好的组织方式。
为避免更改控制器中的大量代码,您可以在模型中对其进行建模并获取模型的 'created' 或 'updated' 事件,然后调用后续事件。
class Offer extends Model
{
protected static function booted()
{
static::updated(function ($user) {
// check for condition and trigger event such as OfferEditedBySeller
});
}
}
如果你想使用 event/listener 架构,那么我认为一个事件和永远通知的侦听器是你必须走的路。
或者,不用担心 events/listeners - 只需从控制器或模型的 'created' 或 'updated' 事件发送通知即可。去掉中间人 (events/listeners),您将拥有更明确的代码,更容易理解。
Events/listeners 在您需要解耦和抽象时很好用 - 但如果您正在做明确的事情,那么不使用它们可能对您来说更简单。
首先,我将描述上下文。
我有很多通知涉及 Offer
、for example: offerEditedBySeller, offerEditedByAdmin, offerTurnOff, etc
中的更改。它们在控制器中的许多地方被触发。
现在我正在实施一个扩展的缓存,我想创建事件 OfferChange
,在该事件中将重新加载特定商品的缓存。首先,我想在事件中触发这些通知,但我意识到要让它工作,我必须复制每个通知。
例如,假设我有 事件 ( new OfferEdited() )。它的侦听器将是 RefreshCacheForOffer、SendNotificationsAboutOfferEdit 等。对于像 offerEdited
这样的每个通知,我需要创建侦听器 SendNotificationsAboutOfferEdit
,这只会触发特定的通知。我想这不是我想要达到的。
有没有办法将 events/listeners 与通知绑定?无论它是 offerEdited
、offerApproved
还是 offerDisapproved
,它都会与事件 OfferChange
绑定,这将触发侦听器 RefreshCacheForOffer
和特定作业下一个。这样我就不必更改每个控制器操作中的代码并创建大量不必要的事件和侦听器。可能吗?
编辑:
我知道我可以做到:
$user->notify(new offerEdited($offer));
event( new OfferChange($offer) );
但我希望有更好的组织方式。
为避免更改控制器中的大量代码,您可以在模型中对其进行建模并获取模型的 'created' 或 'updated' 事件,然后调用后续事件。
class Offer extends Model
{
protected static function booted()
{
static::updated(function ($user) {
// check for condition and trigger event such as OfferEditedBySeller
});
}
}
如果你想使用 event/listener 架构,那么我认为一个事件和永远通知的侦听器是你必须走的路。
或者,不用担心 events/listeners - 只需从控制器或模型的 'created' 或 'updated' 事件发送通知即可。去掉中间人 (events/listeners),您将拥有更明确的代码,更容易理解。
Events/listeners 在您需要解耦和抽象时很好用 - 但如果您正在做明确的事情,那么不使用它们可能对您来说更简单。