2016-06-24 2 views
1

누구나 Symfony에서 Doctrine NotifyPropertyChanged을 구현하는 방법을 말해 줄 수 있습니까? 변경 사항에 대해 통지 할 엔터티에이 코드를 구현했습니다. 그러나 이러한 변경 사항에 대한 리스너를 다른 Entity에 추가하는 방법은 무엇입니까?Symfony에서 Doctrine NotifyPropertyChanged를 구현하는 방법

이 상황을 처리하고 싶다는 뜻입니다. 엔티티 북은 작성자에게 oneToMany가 있습니다. partcular Author에서 무언가가 변경되면 Book Entity에서 이에 반응하고 싶습니다. 그래서 작성자에 NotifyPropertyChanged를 구현했습니다. 세터에서는 알림을 호출하지만 Book 엔터티에이 수신기를 추가하는 방법은 무엇입니까?

답변

1

유스 케이스가 조금 다르다 : ǸotifyPropertyChanged`는 Doctrine에게 엔티티가 변경되었음을 알리는 데 유용합니다. 기본적으로 Doctrine2는 모든 속성을 반복하고 비교합니다 ("자동"입니다). IMO, 떨어 뜨려. 내가보기에 유스 케이스를 사용하는 것은 매우 특이한 경우가 너무 많아서 기본 정책을 사용하는 경우이다.

또 다른 방법은 lifecycle events을 사용하는 것입니다. preUpdate 또는 postUpdate에서 다른 항목을 변경하는 것은 악의적으로입니다. 입니다. Doctrine은 이미 "changeset"을 계산하기 시작했으며, DB에 유지해야 할 것이고, 다른 엔티티를 쉽게 추가 할 수있는 방법이 없습니다.

당신은 세터 내부의 코드를 작성 좋아하기 때문에, 쉽게 경로가이 같은 것입니다 :

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

관련 문제