jon*_*s51 6 php laravel laravel-5.1
我有一个审计类,它扩展了雄辩模型......
class Audit extends Model {
}
Run Code Online (Sandbox Code Playgroud)
我有一个可审计的界面...
interface IAuditiable {
public function audit();
}
Run Code Online (Sandbox Code Playgroud)
我有一个特性,它实现了接口并定义了模型和审计之间的关系......
trait Auditable {
public function audit(){
return $this->hasMany('Audit');
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个模型,它扩展了 Eloquent 模型,实现了接口并使用了特征......
class Post extends Model implements IAuditable {
use Auditable;
}
Run Code Online (Sandbox Code Playgroud)
我想在创建或更新 Post 模型时添加其中的功能create
或update
进行审计。我通过在 Post 上注册一个观察者来解决这个问题,该观察者会捕获“已保存”事件并添加新的审计。
然而,最终会有很多模型使用实现IAuditable
和使用Auditable
trait。
所以,我的问题是,是否有可能实现一个观察者,它可以为任何IAuditable
在Laravel 5.1 中实现接口的模型获取所有“保存”的事件?
小智 5
您可以尝试挂钩雄辩的事件。在服务提供者中做这样的事情:
Event::listen(['eloquent.created: *', 'eloquent.updated: *'], function($model) {
// Check if the model implements your interface (could use class_implements(...)
});
Run Code Online (Sandbox Code Playgroud)
我不得不做一些与你想要做的非常相似的事情。此解决方案并不完美,因为您可以从每个模型中捕获事件,但它运行良好。
编辑:刚刚注意到这个问题是在大约两年前提出的。希望这可以帮助某人,尽管 :)
归档时间: |
|
查看次数: |
1643 次 |
最近记录: |