Laravel - use Request in a function that call another function

3.1k Views Asked by At

I need to retrieve also query string params after registration, so I'm using Request $request in both functions, but how I can pass Request also in second function?

thanks in advance!

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());
}
2

There are 2 best solutions below

0
mrhn On

Laravels container binding only works on controller methods that are invoked, if you call it through ordinary PHP syntax, you will need to pass each parameter.

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

Secondly you can anywhere in your app, use the container to get your request, as long as the lifecycle has a request off course (eg. not in jobs or commands).

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

Try the following:

Since you have used hinting for the $request param inside the create method it has to be an instance of the Request class.

Request::class and $request->all() are different so passing $request->all() will not work.

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());
}