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

如何在Laravel中将控制器变量传递给队列邮件的Blade视图

问题排查

你代码里有2个核心错误导致队列任务执行失败:

  • 实例化OrderMail时没有传入$this->array参数,且调用Mail::send()时传了错误的参数(应该传Mailable实例,而不是数组)
  • 若要在Blade模板直接使用$array变量,你当前只往视图传递了data参数,没有传递完整的$array

修正后的OrderEmailJob代码

public function handle()
{
    // 实例化OrderMail时传入数组参数
    $email = new OrderMail($this->array);
    // send方法传入Mailable实例
    Mail::to($this->array['email'])->send($email);
}

视图调用$array说明

Laravel的Mailable会自动将类的public属性暴露给Blade视图,你已经在OrderMail中声明了public的$array属性,修正Job代码后直接在邮件Blade模板里用$array即可读取所有值。如果要显式声明传递,可以修改OrderMail的build方法:

public function build()
{
    return $this->view($this->array['view'])
        ->from($this->array['from'], config('mail.from.name')) 
        ->subject($this->array['subject'])
        ->with([
            'data' => $this->array['data'],
            'array' => $this->array // 显式传递$array到视图
        ]);
}

额外注意点

  • 不要在配置文件以外的代码中直接调用env()函数,当你执行php artisan config:cache后,所有非配置文件下的env()调用都会返回null,建议改成读取对应的config配置,比如发件人名称读取config('mail.from.name')
  • 队列任务修改后需要重启queue:listen或者queue:work进程,否则旧的代码逻辑还会在队列进程中运行,修改不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:02