You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8中如何将Controller 1的custEmail值传递至Controller 2

如何在Laravel中从Controller 1传递custEmail到Controller 2

下面提供三种可行的实现方式,你可以根据场景选择:

方法一:通过路由参数传递

  1. 修改路由定义,添加邮箱参数:
Route::get('/reg-success/{email}', [Controller2::class, 'sendSuccessMail'])->name('regSuc');
  1. 在Controller 1的customerRegister方法中,跳转时携带邮箱参数:
// 验证通过并保存数据后
return redirect()->route('regSuc', ['email' => $req->custEmail]);
  1. 在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传递

  1. 在Controller 1跳转时将邮箱存入Session:
return redirect()->route('regSuc')->with('custEmail', $req->custEmail);
  1. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:01:01