gpt4 book ai didi

laravel - 使用观察者广播 Eloquent 事件

转载 作者:行者123 更新时间:2023-12-04 02:22:22 25 4
gpt4 key购买 nike

目前,我正在使用观察者在创建和更新我的模型后处理一些事情。

我想通过使用 实时更新我的​​应用程序但我找不到有关使用 的文档与观察者(而不是事件)结合使用。

您可以将事件及其广播功能与它们各自的监听器结合使用来获得此功能,但我喜欢更干净的观察者代码(更少的“魔法”)。

查看 laravel 框架的代码,我可以看到 observable 仍然使用 eloquent 事件,所以我怀疑有一种方法可以广播这些事件。

所以我的问题是:有没有办法使用 来广播 Eloquent 事件?无需创建单个事件或在每个事件上手动添加广播语句?

最佳答案

有趣的问题!我们可以创建一个可重用的通用观察器,它广播从它观察到的模型触发的事件。这消除了为每个场景创建单独事件的需要,我们可以继续使用现有的观察者:

class BroadcastingModelObserver 
{
public function created(Model $model)
{
event(new BroadcastingModelEvent($model, 'created'));
}

public function updated(Model $model) { ... }
public function saved(Model $model) { ... }
public function deleted(Model $model) { ... }
}

class BroadcastingModelEvent implements ShouldBroadcast
{
public $model;
public $eventType;

public function __construct(Model $model, $eventType)
{
$this->model = $model;
$this->eventType = $eventType;
}

public function broadcastOn() { ... }
}

然后,只需指示观察者观察您需要向 Echo 广播事件的任何模型:

User::observe(BroadcastingModelObserver::class);
Post::observe(BroadcastingModelObserver::class);
...

如您所知,多个观察者可以观察同一个模型。这是一个非常简单的例子。我们可以用这种模式做很多巧妙的事情。例如,我们可以声明要在每个模型上广播哪些属性,并配置事件以过滤掉模型未明确允许的任何属性。每个模型还可以声明事件发布到的 channel 或它应该广播的事件类型。

或者,我们可以从您现有的观察者那里广播事件,但听起来您希望避免将这些语句添加到每个观察者中。

关于laravel - 使用观察者广播 Eloquent 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45152785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com