在Laravel 5.2中触发事件后返回结果

时间:2016-08-27 20:08:00

标签: laravel laravel-5 laravel-5.2 laravel-5.1

我的原始代码位于

之下
/*
   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);
    }
}

2 个答案:

答案 0 :(得分:2)

  1. 创建一个类似于此处所述的监听器https://laravel.com/docs/5.2/events
  2. 将所有代码从构造函数移动到侦听器。
  3. 将偶数传递给允许其使用事件数据的侦听器。
  4. 返回&$ 39;返回$ RolePermission-> CreateDefaultPermissions($ list,$ RoleID);'来自听众。

答案 1 :(得分:1)

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

在您的情况下,请使用eloquent model events而不是域事件。另外,您也可以使用服务类。