Laravel - 在调用另一个函数的函数中使用请求

问题描述

注册后我还需要检索查询字符串参数,所以我在两个函数中都使用了 Request $request,但是如何在第二个函数中也传递 Request?

提前致谢!

protected function create(Request $request,array $data) // added "Request $request" for retreive querystring params
{
    $user->name = $data['name'];
    $user->surname = $data['surname'];
    $utm_source = $request->query('utm_source');
    
    $user->save();
}

public function register(Request $request)
{
    $this->validator($request->all())->validate();
    event(new Registered($user = $this->create($request->all()))); // here I'll need two pass two params...

    return $this->registered($request,$user) ?: redirect($this->redirectPath());
}

解决方法

尝试以下操作:

由于您在 $request 方法中对 create 参数使用了提示,因此它必须是 Request 类的实例。

Request::class$request->all() 不同,因此传递 $request->all() 将不起作用。

protected function create(Request $request)
{
    $user->name = $request->name;
    $user->surname = $request->surname;
    $utm_source = $request->query('utm_source');
    
    $user->save();
}

public function register(Request $request)
{
    $this->validator($request->all())->validate();
    event(new Registered($user = $this->create($request)));

    return $this->registered($request,$user) ?: redirect($this->redirectPath());
}
,

Laravels 容器绑定仅适用于被调用的控制器方法,如果通过普通的 PHP 语法调用它,则需要传递每个参数。

event(new Registered($user = $this->create($request,$request->all())));

其次,您可以在应用程序的任何位置,使用容器来获取您的请求,只要生命周期有偏离路线的请求(例如,不在作业或命令中)。

protected function create(array $data)
{
    $request = resolve(Request::class);