'Can't pass Request from controller to another controller's view

I'm trying to pass a Request from a controller, but for reasons I don't understand the data simply isn't being passed through to the view and I get Undefined variable: request. I have confirmed that right up until the redirect to the action the request is populated with all the additional variables, so the issue must be after that.

ManufacturerController

public function decode(Manufacturer $manufacturer, Request $request) {

    $validated = $request->validate([
    "id" => ["required","min:5","max:30", "alpha_num"],
    "email" => ["email","required","max:255"]
    ]);

    $request->merge([
        "manufacturer" => $manufacturer
    ]);

    // Pass the Request to the Manufacturer model and return a modified version of it
    $request = $manufacturer->oneplus($request); 

    return redirect()->action([TransactionController::class, "index"])->with($request);
    }

abort(404);

}

Manufacturer model:

public function oneplus($request) {

  $id = $request->id;

  /* BUSINESS LOGIC THAT GENERATES $new FROM $id... */
  
  $request->merge([
    'new' => $new
  ]);
      
  return $request;
}

Route in web.php

Route::get('/payment', [TransactionController::class, "index"]);

TransactionController:

public function index()
{
    return view('payment');
}

payment.blade.php

{{ dd($request->new) }}


Solution 1:[1]

You need to make few changes in TransactionController and ManufacturerController to make it work

TransactionController:

public function index(Request $request)
{
    return view('payment', [
        'request' => $request->session()->get('request')
     ]);
}

ManufacturerController:

public function decode(Manufacturer $manufacturer, Request $request) {

    $validated = $request->validate([
    "id" => ["required","min:5","max:30", "alpha_num"],
    "email" => ["email","required","max:255"]
    ]);

    $request->merge([
        "manufacturer" => $manufacturer
    ]);

    // Pass the Request to the Manufacturer model and return a modified version of it
    $request = $manufacturer->oneplus($request); 

    return redirect()->action([TransactionController::class, "index"])->with('request', $request->all());
    }

abort(404);

}

Solution 2:[2]

You can pass like this
ManufacturerController :

return redirect()->action(
    [TransactionController::class, "index"],
    ['data' => $request]
);

Route in web.php

// ? = Optional
Route::get('/payment/{data?}', [TransactionController::class, "index"]);

TransactionController:

public function index($data)
{
    return view('payment');
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Deepak
Solution 2 Nay Lin Aung