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

Laravel邮件函数无法传递变量至视图,提示变量未定义

解决Laravel邮件视图中「变量未定义」的问题

我来帮你排查下这个问题哈,你遇到的错误主要是因为邮件数据传递的方式不对,还有闭包变量作用域的问题,咱们一步步来修复:

问题分析

  1. 闭包变量未引入:你在Mail::send的闭包里想访问外部的$data,但没有用use关键字引入,导致闭包内部根本拿不到这个变量。
  2. 视图数据传递方式错误:Mail::send的第二个参数已经是要传递给视图的数据数组了,你额外调用->with('data',$data)完全是多余的,而且这里的$data本身就访问不到。
  3. 视图变量调用可以更简洁:你传递的$data数组键是emailMessage,视图里不需要套$data['emailMessage'],直接用变量名即可。

修复后的控制器代码

public function broadcastemail(Request $request) { 
    $this->validate($request, [ 
        'subject' => 'required', 
        'emailMessage' => 'required' 
    ]); 

    // 整理要传递给视图的数据
    $data = [
        'emailMessage' => $request->emailMessage
    ]; 

    // 用use引入外部的$request,避免闭包内无法访问
    Mail::send('backend.user.emailMessage', $data, function($message) use ($request) { 
        $subject = $request->subject; 
        $user = User::find('31'); 
        $email = $user->email; 
        $name = $user->first_name; 
        // 移除多余的with方法,视图数据已经通过第二个参数传递
        $message->to($email, $name)->subject($subject); 
    }); 

    return back()->withSuccess('Mail Sent Successfully'); 
}

对应的视图代码(两种可选方式)

方式一:直接使用变量(推荐)

<p>{{ $emailMessage }}</p>

方式二:保留$data数组结构(如需传递多个变量打包)

如果一定要在视图里用$data['emailMessage'],可以调整控制器里的数据结构:

// 控制器里修改$data的结构
$data = [
    'data' => [
        'emailMessage' => $request->emailMessage
        // 可以在这里添加其他需要传递的变量
    ]
];

此时视图里的{{ $data['emailMessage'] }}就能正常访问了。

额外注意点

  • 闭包内要访问外部变量时,必须通过use关键字引入,比如上面的use ($request)。
  • Mail::send的第二个参数是视图专属的数据源,数组的键就是视图中可直接调用的变量名,无需额外嵌套。
  • $message->with()方法是用来给邮件消息本身添加元数据的,不是给视图传递参数的,别用错地方啦。

内容的提问来源于stack exchange,提问作者macjayz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:47:46