2016-08-27 86 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而不是域事件。此外,作爲替代方案,您可以使用服務類。