如何观察在Laravel 5.1中实现接口的所有模型?

时间:2015-12-02 12:36:32

标签: php laravel laravel-5.1

我有一个审核类,它扩展了 Eloquent Model ...

class Audit extends Model {
}

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

interface IAuditiable {
    public function audit();
}

我有一个特性来完成界面并定义模型和审计之间的关系......

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

我有一个扩展Eloquent Model的模型实现了接口并使用了特征......

class Post extends Model implements IAuditable {
    use Auditable;
}

每当创建或更新Post模型时,我都想在createupdate审核中添加功能。我通过在邮政上注册观察员来解决这个问题,该观察员会抓住“已保存”的观察者。事件并添加新审核。

但是,最终会有许多模型使用IAuditable并使用Auditable特征。

所以,我的问题是,是否有可能实现一个观察者,这个观察者将获得所有已经保存的'在 Laravel 5.1 中实现IAuditable接口的任何模型的事件?

1 个答案:

答案 0 :(得分:1)

您可以尝试连接雄辩的事件。在服务提供商中做这样的事情:

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

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

编辑:刚刚注意到这个问题差不多在两年前被问到了。希望这可以帮助某人,但是:)