每当我修改一个关系(多对多)时,我想做另一个动作。据我所知,这不能使用事件监听器完成(参见https://github.com/laravel/framework/issues/2303)。这有效,
function setUserGroups($ids){
$this->groups->sync($ids);
doSomethingElse();
}
缺点是其他开发人员不记得使用此功能。通常,我可以使用mutator将行为附加到其他属性中,将它们定义为保护或添加事件,我只是希望能够执行类似于同步/附加的操作。
我没有看到创建存储库作为解决方案。我们在应用程序中没有使用存储库模式,老实说,我也看到了这个问题。
答案 0 :(得分:0)
您可以注册自定义事件处理程序和侦听器:
// register listener
Event::listen('user.groupsModified', 'User@onGroupsModified');
事件处理程序:
// Handle event in User class
function onGroupsModified($event)
{
}
然后在setUserGroups
函数中激活事件:
function setUserGroups($ids){
$this->groups->sync($ids);
// Fire the event
Event->fire('user.groupsModified');
}
这样,您可以从setUserGroups
方法中抽象出依赖关系,现在您只需要触发事件,而不需要知道处理程序的名称。