如何将结果从侦听器返回给控制器

How to return the result from listener to the Controller

提问人:japose7523 提问时间:12/11/2022 更新时间:12/11/2022 访问量:251

问:

我正在使用 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

所以如果你知道,请告诉我......

PHP Laravel Laravel-9 Laravel-事件

评论

0赞 Vaso Gamdelidze 12/11/2022
您为什么决定举办注册用户事件?为什么不选择最简单的方法从控制器注册用户?现在你可以搜索 User::where('some unique filed', 'parameter')->firstOrFail() 然后以用户身份使用它。
0赞 japose7523 12/11/2022
@VasoGamdelidze这只是一个例子兄弟,我只想知道如何从侦听器获取返回的对象并将其传递给控制器......
1赞 Vaso Gamdelidze 12/11/2022
侦听器句柄方法返回类型为 void,并且必须没有可用才能返回任何内容。

答:

1赞 Michael Yousrie 12/11/2022 #1

在我看来,这里事件的使用是不正确的。

事件/侦听器可用于发生特定事件来执行基于该事件的函数。after

例如,新用户注册后,向他们发送欢迎电子邮件。

因此,您将有一个被调用的事件,每当注册完成时,该事件就会被广播。对于该事件,您将有一个(或更多)侦听器,称为 .NewUserRegisteredSendWelcomeEmail


就你而言,我认为你有相反的情况。

根据我的理解,您希望为新注册的用户生成某种代码。

因此,您可以使用逻辑在控制器中注册用户(或者,如果逻辑在多个控制器/位置中使用,则可以注册类),然后在注册过程完成后广播一个事件,该事件将有一个侦听器来执行您拥有的逻辑。这样,您就可以在事件中接受新注册的用户作为参数,并在侦听器中访问它。generate active code

我希望这会有所帮助。如果我没有正确理解您的问题,请告诉我,我会相应地更新我的答案。