提问人:japose7523 提问时间:12/11/2022 更新时间:12/11/2022 访问量:251
如何将结果从侦听器返回给控制器
How to return the result from listener to the Controller
问:
我正在使用 Laravel 9,当新用户注册并注册时,我在我的 Controller 方法中调用了此事件:
$data = $request->validated();
event(new RegisterNewUserEvent($data));
$code = ActiveCode::generateCode($user);
dd($code);
因此,RegisterNewUserEvent
事件将通过调用此侦听器来创建新记录:
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,
]);
$event->data = $user->id;
}
因此,它将新创建的用户存储在 object 中并返回 Controller 方法,我需要这个对象来返回激活码,如下所示:$user
$code = ActiveCode::generateCode($user);
但我不知道,如何从事件侦听器中获取对象并在 Controller 方法中再次调用它!$user
所以如果你知道,请告诉我......
答:
1赞
Michael Yousrie
12/11/2022
#1
在我看来,这里事件的使用是不正确的。
事件/侦听器可用于发生特定事件来执行基于该事件的函数。after
例如,新用户注册后,向他们发送欢迎电子邮件。
因此,您将有一个被调用的事件,每当注册完成时,该事件就会被广播。对于该事件,您将有一个(或更多)侦听器,称为 .NewUserRegistered
SendWelcomeEmail
就你而言,我认为你有相反的情况。
根据我的理解,您希望为新注册的用户生成某种代码。
因此,您可以使用逻辑在控制器中注册用户(或者,如果逻辑在多个控制器/位置中使用,则可以注册类),然后在注册过程完成后广播一个事件,该事件将有一个侦听器来执行您拥有的逻辑。这样,您就可以在事件中接受新注册的用户作为参数,并在侦听器中访问它。generate active code
我希望这会有所帮助。如果我没有正确理解您的问题,请告诉我,我会相应地更新我的答案。
评论