2015-12-02 24 views
4

我有延伸鋒模型審計類...如何觀察在Laravel 5.1中實現接口的所有模型?

class Audit extends Model { 
} 

我有一個可審計的接口...

interface IAuditiable { 
    public function audit(); 
} 

我有一臺符合接口並限定的性狀模型和審計之間的關係...

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

我有一個模型,擴展了雄辯模型我mplements的界面和使用特點...

class Post extends Model implements IAuditable { 
    use Auditable; 
} 

我想在裏面添加功能createupdate每當創建或更新的Post模型進行了審計。我已經通過在Post上註冊觀察員來解決這個問題,該觀察員將捕獲「已保存」事件並添加新的審計。

但是,最終會出現許多使用IAuditable和使用Auditable特徵的模型。

所以,我的問題是,是否有可能實現一個觀察者,它將爲任何實現Laravel 5.1接口的模型提取所有「已保存」事件?

+0

你有沒有考慮過像https://github.com/VentureCraft/revisionable? – user2094178

+0

您可以製作自己的模型合約,爲已保存的功能實現附加功能,並讓您的可審計模型擴展AuditableModel –

+0

是的,@Brynn似乎是目前唯一的解決方案。這就是Venture Craft的可修改解決方案。我並不熱衷於此,因爲1)我不希望增加額外繼承的複雜性2)未來可能會有其他更新需要擴展保存的方法。 – jonadams51

回答

1

你可以嘗試勾引雄辯的事件。在服務提供商處做這樣的事情:

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

我不得不做一些非常類似於你想要做的事情。這個解決方案並不完美,因爲你可以每模型捕獲來自的事件,但它工作得很好。

編輯:剛注意到這個問題幾乎兩年前就被問到了。希望這可以幫助別人,雖然:)

+0

幫我出去!謝謝 :) –