2014-06-10 3 views
1

관계를 수정할 때마다 (여러 대 다수) 다른 작업을 수행하고 싶습니다. 아는 한 이벤트 리스너를 사용하여 수행 할 수 없습니다 (https://github.com/laravel/framework/issues/2303 참조). 이 작동,Laravel : 함수를 동기화 할 때 호출하거나 첨부하십시오.

function setUserGroups($ids){ 
    $this->groups->sync($ids); 
    doSomethingElse(); 
} 

단점은 다른 개발자가이 기능을 사용하는 것을 기억하기가 쉽지 않다는 점입니다. 일반적으로 mutators를 사용하여 다른 속성을 변경하기 위해 행동을 첨부 할 수 있습니다.이를 경계 또는 이벤트 추가로 정의하고 동기화/첨부와 비슷한 작업을 수행 할 수 있기를 바랍니다.

이 문제에 대한 해결책으로 저장소를 만드는 것을 볼 수 없습니다. 우리는 애플리케이션에서 저장소 패턴을 사용하지 않고 있고 솔직히이 문제도 거기에 나타나고 있습니다. 당신은

function setUserGroups($ids){ 

    $this->groups->sync($ids); 

    // Fire the event 
    Event->fire('user.groupsModified'); 
} 

이 방법 :

// register listener 
Event::listen('user.groupsModified', '[email protected]'); 

이벤트 처리기 :

// Handle event in User class 
function onGroupsModified($event) 
{ 

} 

그런 다음 setUserGroups 함수에서 이벤트가 발생

+1

3 년 1 년 및 솔루션 없음. 지금까지 찾은 최고의 방법은 "업데이트하는"웅변적인 방법을 사용하는 것입니다. 그러나 DB에서 업데이트하기 전에 바로 호출해야합니다. 필드를 계산하는 데 유용하지만 모든 사람들을위한 솔루션이 아닐 수도 있습니다. – George

+1

결국 내 축을 내 자신의 모델로 변환 결국 –

답변

0

당신은 당신의 사용자 정의 이벤트 핸들러와 리스너를 등록 할 수 있습니다 setUserGroups 메소드의 종속성을 추상화 할 수 있습니다. 이벤트를 발생시키고 처리기의 이름을 알 필요가 없습니다.

+1

devs 여전히 setUserGroups를 호출하는 기억해야 할 때 일반적으로 어떤 문제없이 직접 동기화를 호출 할 수있는 관계를 수정할 때 반면. 나는 일반적으로 laravel이 웅변 메서드/속성 수정에 동작을 첨부하는 데 좋습니다 (따라서 래퍼 함수를 ​​호출 할 필요가 없음).이 메서드는 내가 얻을 수없는 유일한 예제입니다. . –

+1

개발자는'Event-> fire ('user.groupsModified')를 실행하는 것을 기억하면됩니다. –

+1

그것은 맞춤법 메서드를 호출하는 것보다 낫다는 것을 사실이지만, 어떻게 든 그것을 연결하는 방법이 있어야한다고 생각합니다. –

관련 문제