无法将请求从控制器传递到另一个控制器的视图
Can't pass Request from controller to another controller's view
我正在尝试传递来自控制器的请求,但由于我不明白的原因,数据根本没有传递到视图,我得到 Undefined variable: request
。我已经确认,在重定向到操作之前,请求中填充了所有附加变量,所以问题一定在那之后。
制造商控制器
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);
}
厂商型号:
public function oneplus($request) {
$id = $request->id;
/* BUSINESS LOGIC THAT GENERATES $new FROM $id... */
$request->merge([
'new' => $new
]);
return $request;
}
路线在web.php
Route::get('/payment', [TransactionController::class, "index"]);
事务控制器:
public function index()
{
return view('payment');
}
payment.blade.php
{{ dd($request->new) }}
您需要对 TransactionController 和 ManufacturerController 进行少量更改才能使其正常工作
事务控制器:
public function index(Request $request)
{
return view('payment', [
'request' => $request->session()->get('request')
]);
}
制造商控制器:
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);
}
你可以这样通过
制造商控制器:
return redirect()->action(
[TransactionController::class, "index"],
['data' => $request]
);
路线在web.php
// ? = Optional
Route::get('/payment/{data?}', [TransactionController::class, "index"]);
事务控制器:
public function index($data)
{
return view('payment');
}
使用重定向时的问题是重定向会导致发生全新的请求。使用 redirect()->with('variable', 'value')
时,您需要使用以下方法访问该变量:
session('variable')`
原因是变量通过会话“闪现”到下一个请求(实际上它不会发送到下一个请求,它只是可用于通过会话的下一个请求然后消失)。
虽然这可能是您问题的简单解决方案,但更好的解决方案是尽可能不使用重定向。这是替代方案的简化:
制造商控制器:
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);
$transactionController = app()->make(TransactionController::class);
return $transactionController->index($request);
}
事务控制器:
public function index(Request $request)
{
return view('payment')->with("request", $request);
}
这将在同一个请求中调用另一个控制器方法。
我正在尝试传递来自控制器的请求,但由于我不明白的原因,数据根本没有传递到视图,我得到 Undefined variable: request
。我已经确认,在重定向到操作之前,请求中填充了所有附加变量,所以问题一定在那之后。
制造商控制器
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);
}
厂商型号:
public function oneplus($request) {
$id = $request->id;
/* BUSINESS LOGIC THAT GENERATES $new FROM $id... */
$request->merge([
'new' => $new
]);
return $request;
}
路线在web.php
Route::get('/payment', [TransactionController::class, "index"]);
事务控制器:
public function index()
{
return view('payment');
}
payment.blade.php
{{ dd($request->new) }}
您需要对 TransactionController 和 ManufacturerController 进行少量更改才能使其正常工作
事务控制器:
public function index(Request $request)
{
return view('payment', [
'request' => $request->session()->get('request')
]);
}
制造商控制器:
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);
}
你可以这样通过
制造商控制器:
return redirect()->action(
[TransactionController::class, "index"],
['data' => $request]
);
路线在web.php
// ? = Optional
Route::get('/payment/{data?}', [TransactionController::class, "index"]);
事务控制器:
public function index($data)
{
return view('payment');
}
使用重定向时的问题是重定向会导致发生全新的请求。使用 redirect()->with('variable', 'value')
时,您需要使用以下方法访问该变量:
session('variable')`
原因是变量通过会话“闪现”到下一个请求(实际上它不会发送到下一个请求,它只是可用于通过会话的下一个请求然后消失)。
虽然这可能是您问题的简单解决方案,但更好的解决方案是尽可能不使用重定向。这是替代方案的简化:
制造商控制器:
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);
$transactionController = app()->make(TransactionController::class);
return $transactionController->index($request);
}
事务控制器:
public function index(Request $request)
{
return view('payment')->with("request", $request);
}
这将在同一个请求中调用另一个控制器方法。