Laravel:同步或附加呼叫功能

时间:2014-06-10 16:56:09

标签: laravel laravel-4

每当我修改一个关系(多对多)时,我想做另一个动作。据我所知,这不能使用事件监听器完成(参见https://github.com/laravel/framework/issues/2303)。这有效,

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

缺点是其他开发人员不记得使用此功能。通常,我可以使用mutator将行为附加到其他属性中,将它们定义为保护或添加事件,我只是希望能够执行类似于同步/附加的操作。

我没有看到创建存储库作为解决方案。我们在应用程序中没有使用存储库模式,老实说,我也看到了这个问题。

1 个答案:

答案 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方法中抽象出依赖关系,现在您只需要触发事件,而不需要知道处理程序的名称。