gpt4 book ai didi

php - 如何在 Laravel 5.1 中观察所有实现接口(interface)的模型?

转载 作者:可可西里 更新时间:2023-10-31 23:29:19 25 4
gpt4 key购买 nike

我有一个扩展Eloquent 模型的审计类...

class Audit extends Model {
}

我有一个可审核的界面...

interface IAuditiable {
public function audit();
}

我有一个特性可以实现接口(interface)并定义模型和审计之间的关系...

trait Auditable {
public function audit(){
return $this->hasMany('Audit');
}
}

我有一个扩展 Eloquent 模型的模型,它实现了接口(interface)并使用了特征...

class Post extends Model implements IAuditable {
use Auditable;
}

我想在其中添加功能,以便在创建或更新 Post 模型时创建更新 审计。我已经通过在 Post 上注册一个观察者来解决这个问题,该观察者将捕获“已保存”事件并添加新的审计。

但是,最终会有许多模型使用实现 IAuditable 和使用 Auditable 特性。

所以,我的问题是,是否有可能实现一个观察器,它会为任何在 Laravel 5.1 中实现 IAuditable 接口(interface)的模型获取所有“已保存”事件?

最佳答案

您可以尝试 Hook 到 Eloquent 事件。在服务提供者中做这样的事情:

Event::listen(['eloquent.created: *', 'eloquent.updated: *'], function($model) {
// Check if the model implements your interface (could use class_implements(...)
});

我必须做一些与您想要做的事情非常相似的事情。该解决方案并不完美,因为您可以从每个 模型捕获事件,但它运行良好。

编辑:刚刚注意到这个问题几乎是在两年前提出的。不过,希望这对某人有所帮助:)

关于php - 如何在 Laravel 5.1 中观察所有实现接口(interface)的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34042945/

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