Return 事件在 Laravel 5.2 中触发后的结果
Return result after the event is fired in Laravel 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 个点正在创建角色,而不是代码重复,我想将此代码转换为事件。因此,无论何时创建角色,都会触发一个事件来为该 role.I 编写以下代码创建权限记录。
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);
}
}
- 像这里描述的那样创建一个监听器https://laravel.com/docs/5.2/events。
- 将所有代码从构造函数移至侦听器。
- 将 even 传递给允许其使用事件数据的侦听器。
- Return 'return $RolePermission->CreateDefaultPermissions($list, $RoleID);' 来自听众。
事件不应该 return 一个值,它们只是对发生的事情做出反应。新用户注册后发送电子邮件之类的东西。
在您的情况下,请使用 eloquent model events 而不是领域事件。此外,作为替代方案,您可以使用服务 class.
下面是我的原码
/*
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 个点正在创建角色,而不是代码重复,我想将此代码转换为事件。因此,无论何时创建角色,都会触发一个事件来为该 role.I 编写以下代码创建权限记录。
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);
}
}
- 像这里描述的那样创建一个监听器https://laravel.com/docs/5.2/events。
- 将所有代码从构造函数移至侦听器。
- 将 even 传递给允许其使用事件数据的侦听器。
- Return 'return $RolePermission->CreateDefaultPermissions($list, $RoleID);' 来自听众。
事件不应该 return 一个值,它们只是对发生的事情做出反应。新用户注册后发送电子邮件之类的东西。
在您的情况下,请使用 eloquent model events 而不是领域事件。此外,作为替代方案,您可以使用服务 class.