Laravel 8中如何将Controller 1的custEmail值传递至Controller 2
如何在Laravel中从Controller 1传递custEmail到Controller 2
下面提供三种可行的实现方式,你可以根据场景选择:
方法一:通过路由参数传递
- 修改路由定义,添加邮箱参数:
Route::get('/reg-success/{email}', [Controller2::class, 'sendSuccessMail'])->name('regSuc');
- 在Controller 1的
customerRegister方法中,跳转时携带邮箱参数:
// 验证通过并保存数据后 return redirect()->route('regSuc', ['email' => $req->custEmail]);
- 在Controller 2的
sendSuccessMail方法中接收参数:
public function sendSuccessMail(Request $request, $email) { $details = [ 'title' => 'Mail From ETR Infotech', 'body' => 'This is a Testing Email From Laravel' ]; Mail::to($email) ->send(new RegisterSuccessMail($details)); return redirect()->back()->with('success', 'Customer Registration Successful!, We Will Get Back To You Soon.'); }
方法二:通过Session传递
- 在Controller 1跳转时将邮箱存入Session:
return redirect()->route('regSuc')->with('custEmail', $req->custEmail);
- 在Controller 2中从Session取出邮箱:
public function sendSuccessMail(Request $request) { $custEmail = $request->session()->get('custEmail'); // 或者直接使用 session('custEmail') $details = [ 'title' => 'Mail From ETR Infotech', 'body' => 'This is a Testing Email From Laravel' ]; Mail::to($custEmail) ->send(new RegisterSuccessMail($details)); return redirect()->back()->with('success', 'Customer Registration Successful!, We Will Get Back To You Soon.'); }
方法三:从数据库读取(推荐,避免参数泄露)
因为你已经将客户数据保存到数据库,可直接从数据库查询邮箱:
public function sendSuccessMail(Request $request) { // 根据邮箱查询客户记录(假设邮箱唯一) $customer = Customer::where('email', $request->session()->get('custEmail'))->first(); // 若需获取刚创建的记录,也可用 Customer::latest()->first(),但需注意并发场景 $details = [ 'title' => 'Mail From ETR Infotech', 'body' => 'This is a Testing Email From Laravel' ]; Mail::to($customer->email) ->send(new RegisterSuccessMail($details)); return redirect()->back()->with('success', 'Customer Registration Successful!, We Will Get Back To You Soon.'); }
额外优化:调整Controller 1的代码顺序
当前Controller 1中先创建模型再做验证,若验证失败会浪费资源,建议先验证再创建模型:
public function customerRegister(Request $req) { // 先执行验证 $validatedData = $req->validate([ 'custName' => 'required', 'custNo' => 'required|numeric', 'custEmail' => 'required|email', 'custAddr' => 'required', 'custType' => 'required', ], [ 'custName.required' => 'Customer Name is required', 'custNo.required' => 'Customer Whatsapp No is required', 'custEmail.required' => 'Customer Email is required', 'custAddr.required' => 'Customer Address is required', 'custType.required' => 'Customer Type is required', ]); // 验证通过后再创建并保存模型 $customer = new Customer; $customer->cust_name = $validatedData['custName']; $customer->cust_mob_no = $validatedData['custNo']; $customer->email = $validatedData['custEmail']; $customer->cust_addr = $validatedData['custAddr']; $customer->cust_type = $validatedData['custType']; $customer->save(); return redirect()->route('regSuc', ['email' => $validatedData['custEmail']]); }
内容的提问来源于stack exchange,提问作者ETR Infotech
相关产品推荐
相关产品推荐

