gpt4 book ai didi

php - 如何将对象从事件的监听器传递给同一事件的另一个监听器

转载 作者:行者123 更新时间:2023-12-05 04:31:07 26 4
gpt4 key购买 nike

在 Laravel 9 中,我使用 __construct 函数创建了一个名为 RegisterNewUserEvent 的事件($data 包含 $request 表单数据)。

public function __construct($data)
{
$this->data = $data;
}

并且这个事件有两个注册的监听器:

protected $listen = [
\App\Events\RegisterNewUserEvent::class => [
\App\Listeners\MakeNewUserRecord::class
\App\Listeners\MakeNewMemberRecord::class
]
];

users 表中创建一条新的用户记录。

public function handle(RegisterNewUserEvent $event)
{
$firstName = $event->data['fname'];
$lastName = $event->data['lname'];
$userName = $event->data['uname'];
$mobilePhone = $event->data['phone'];
$hashPassword = Hash::make($event->data['password']);
$randomString = Str::random(20);

$user = User::create([
'usr_first_name' => $firstName,
'usr_last_name' => $lastName,
'usr_user_name' => $userName,
'usr_mobile_phone' => $mobilePhone,
'usr_password_hash' => $hashPassword,
'usr_str' => $randomString,
]);

// return $user;
}

另一个在 members 表中创建了新记录。

public function handle(RegisterNewUserEvent $event)
{
$member = Member::create([
'mbr_usr_id' => $user->id,
]);
}

如您所见,members 表有一个名为 mbr_usr_id 的列,它与 users 相关联。 id 表列,此列的值必须分配给相关的 user_id,由第一个监听器创建。因此,我需要一些方法在调用第一个监听器后将 $user->id 传递给第二个监听器。那么我如何才能将这个新对象“$user”传递给同一事件的另一个监听器呢?

最佳答案

您可以更改来自第一个监听器的事件中的数据值,因为数据已经是公共(public)事件类变量,那么第二个监听器将获得新的数据值。

  1. 我们将在第一个监听器中使用创建的用户 ID 覆盖 $data 变量 $event->$data = $user->id;
  2. 现在在第二个监听器中我们可以使用新的数据值,即创建的用户 ID

主要事件

public mixed data;

public function __construct($data)
{
$this->data = $data;
}

第一个听众

public function handle(RegisterNewUserEvent $event)
{
$firstName = $event->data['fname'];
$lastName = $event->data['lname'];
$userName = $event->data['uname'];
$mobilePhone = $event->data['phone'];
$hashPassword = Hash::make($event->data['password']);
$randomString = Str::random(20);

$user = User::create([
'usr_first_name' => $firstName,
'usr_last_name' => $lastName,
'usr_user_name' => $userName,
'usr_mobile_phone' => $mobilePhone,
'usr_password_hash' => $hashPassword,
'usr_str' => $randomString,
]);

// here is the line change
$event->data = $user->id;
}

第二个听众

public function handle(RegisterNewUserEvent $event)
{
$member = Member::create([
'mbr_usr_id' => $event->data,
]);
}

关于php - 如何将对象从事件的监听器传递给同一事件的另一个监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71900709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com