2016-08-27 53 views
0

我原来的代码如下返回结果后5.2

/* 
    Create the Role 
*/ 

$result = (new RoleDb())->Create($obj); 

if($result["Success"]) { 

    /* 
    | Get all Modules 
    */ 

    $Permissions = $this->Module->All($obj->RoleID); 
    $list = []; 

    /* 
    | Prepare the list that will be assigned to Newly created role. 
    */ 

    foreach($Permissions["Data"] as $Permission) { 
     $RolePermissionOM = new RolePermissionOM(); 
     $RolePermissionOM->PermissionID    = $Permission->PermissionID; 
     $RolePermissionOM->IsActive     = $Permission->DefaultPermission; 
     $RolePermissionOM->RoleID     = $result["Data"]; 
     array_push($list, $RolePermissionOM); 
    } 

    /* 
    | Create default permissions for above created role. 
    */ 

    return $this->RolePermission->CreateDefaultPermissions($list, $result["Data"]); 
} 

现在,在我的应用程序,有些情况下被创建,并代替代码重复角色3个点,我尽管将此代码转换为事件。因此,无论何时创建角色,都会触发一个事件来为该角色创建权限记录。我编写了下面的代码。

Event::fire(new RoleCreationEvent($result)); 
// `$result` contains the newly created RoleID. 

问题:在我的原代码,我能得到的结果来检查权限设置是否正确或不保存。如何解雇事件?

事件代码

class RolePermissionEvent extends Event 
{ 
    use SerializesModels; 

    public function __construct($RoleID, $Module, $RolePermission) 
    { 

     $Permissions = $Module->All($RoleID); 
     $list = []; 

     foreach($Permissions["Data"] as $Permission) { 
      $RolePermissionOM = new RolePermissionOM(); 
      $RolePermissionOM->PermissionID = $Permission->PermissionID; 
      $RolePermissionOM->RoleID  = $RoleID; 
      array_push($list, $RolePermissionOM); 
     } 

     return $RolePermission->CreateDefaultPermissions($list, $RoleID); 
    } 
} 
+0

另外:我在我的生活中看过很多代码注释,但作为延续角色的管道是我的第一个。我喜欢! – bishop

+0

返回听众的结果。 Event :: fire(new RoleCreationEvent($ result));将返回数组中的所有这些结果。 –

+0

@AndrejLudinovskov:我刚刚添加的事件代码里面,返回值,如果我检查事件,我可以看到返回的数据,但是当我尝试这个......'$ result = \ Event :: fire(new RolePermissionEvent $ result [“Data”],$ this-> Module,$ this-> RolePermission)); dd($ result);'它返回空数组。 – Pankaj

回答

2
  1. 创建一个监听喜欢这里https://laravel.com/docs/5.2/events描述。
  2. 将所有代码从构造函数移至侦听器。
  3. 将even传递给允许其使用事件数据的侦听器。
  4. 返回'返回$ RolePermission-> CreateDefaultPermissions($ list,$ RoleID);'来自听众。
0

事件不应该返回一个值,它们只是对发生的事情做出反应。就像在新用户注册后发送电子邮件一样。

在你的情况下,使用eloquent model events而不是域事件。此外,作为替代方案,您可以使用服务类。