我有一个扩展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/