2016-06-24 76 views
1

誰能告訴我如何在Symfony中實現Doctrine NotifyPropertyChanged? 我已經在一個實體中實現了這個代碼,它將通知有關的變化。但是如何在另一個實體中爲這些更改添加監聽器?如何在Symfony中實現Doctrine NotifyPropertyChanged

我的意思是我想處理這種情況:實體書有一對多作者。當某個作者正在改變某些內容時,我想在書本實體中對其作出反應。所以我在Author中實現了NotifyPropertyChanged。在setter中,我調用通知,但是如何將此偵聽器添加到Book實體?

回答

1

它看起來像你的用例有點不同:ǸotifyPropertyChanged`是有用的告訴學說你的實體改變。默認情況下,Doctrine2將迭代所有屬性並進行比較(所以這是「自動」)。海事組織,放下它。我現在看到的僅僅是使用案例,一些非常具體的案例使用默認策略會花費太多。

另一種方法是使用一些lifecycle events。從preUpdatepostUpdate改變其他實體是難以名狀。學說已經開始對「變更集」進行計算,堅持數據庫的內容,並且沒有簡單的方法向其中添加另一個實體。

既然你都OK編寫制定者內部的一些代碼,更容易路徑是這樣的:

class Author 
{ 
    public function setName($name) 
    { 
     // ... 

     // for each setter, call onChanged 
     $this->onChange(); 
    } 

    private function onChange() 
    { 
     foreach ($this->books as $book) { 
      // maybe call some method on your books, like onAuthorChanged() ? 
     } 
    } 
} 
+0

如此簡單,非常乾淨。非常感謝你!!! :)像一個魅力工作! – Tom

相關問題