In Laravel 9, I have created an Event called RegisterNewUserEvent with this __construct function ($data here holds the $request data of a form).
public function __construct($data)
{
$this->data = $data;
}
And this event has two registered listeners:
protected $listen = [
\App\Events\RegisterNewUserEvent::class => [
\App\Listeners\MakeNewUserRecord::class
\App\Listeners\MakeNewMemberRecord::class
]
];
One makes a new user record at the users table.
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;
}
And the other one makes a new record at the members table.
public function handle(RegisterNewUserEvent $event)
{
$member = Member::create([
'mbr_usr_id' => $user->id,
]);
}
So as you can see, the members table has a column named mbr_usr_id, which is connected to the users. id table column, and the value of this column must be assigned to the related user_id, created by the 1st listener. Therefore I need some way to pass the $user->id to the 2nd listener after the 1st listener is called. So how can I pass this new object, ' $user`, to another listener of the same event?
You can change the data value in the event from the first listener since the data is already a public event class variable , then the second listener will get the new value of data .
$event->$data = $user->id;main event
first listener
second listener