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

Angular14+Laravel8发送邮件时出现what_do_you未定义变量错误

解决邮件发送时undefined variable key/what_do_you错误

核心问题分析

报错说明邮件模板或邮件类中引用的$what_do_you变量未被正确传递——虽然报价能正常保存,但该字段没有被带到邮件发送环节。下面按从后端到前端的顺序排查解决:

1. 检查Laravel邮件类的变量传递

首先确保邮件类能接收到what_do_you的值:

  • 如果用构造函数传参:

    // app/Mail/ReceiverOfferMail.php
    class ReceiverOfferMail extends Mailable
    {
        public $what_do_you; // 公共变量会自动共享给Blade模板
    
        public function __construct(string $jobTitle)
        {
            $this->what_do_you = $jobTitle;
        }
    
        public function build()
        {
            return $this->view('emails.receiver_offer');
        }
    }
    

    触发邮件时传入正确的值:

    // 控制器中保存报价后发送邮件
    $offer = Offer::create($validatedData);
    Mail::to($receiverEmail)->send(new ReceiverOfferMail($offer->what_do_you));
    
  • 如果用**with()方法传数组**:

    public function build()
    {
        return $this->view('emails.receiver_offer')
                    ->with([
                        'what_do_you' => $this->offer->what_do_you,
                        // 其他需要的变量
                    ]);
    }
    

2. 验证邮件模板的变量引用

确保Blade模板中使用的变量名和传递的完全一致,比如:

<!-- resources/views/emails/receiver_offer.blade.php -->
<p>您发布的职位「{{ $what_do_you }}」收到了新报价</p>

注意不要写错变量名(比如驼峰$whatDoYou和下划线$what_do_you要统一)。

3. 确认Laravel后端正确接收并保存what_do_you

检查控制器的store方法,确保请求参数被正确验证和保存:

public function store(Request $request)
{
    $validatedData = $request->validate([
        'what_do_you' => 'required|string',
        // 其他报价字段的验证规则
    ]);

    // 保存报价到数据库
    $offer = Offer::create($validatedData);

    // 这里发送邮件
    Mail::to($request->user()->email)->send(new ReceiverOfferMail($offer->what_do_you));

    return response()->json(['message' => '报价保存成功']);
}

可以用dd($request->all())打印请求参数,确认what_do_you存在且有值。

4. 检查Angular前端的请求 payload

确保saveOffer方法发送的请求中包含正确命名的what_do_you字段:

// 组件或服务中的saveOffer方法
saveOffer(offerForm: FormGroup) {
    const payload = {
        what_do_you: offerForm.get('jobTitle')?.value, // 对应前端表单的职位名称字段
        // 其他报价相关字段
    };

    this.http.post('/api/offers', payload).subscribe({
        next: (res) => console.log('报价提交成功'),
        error: (err) => console.error('提交失败', err)
    });
}

打开浏览器开发者工具的Network面板,查看POST请求的Form Data或Request Payload,确认what_do_you键存在且值正确。

5. 最终调试技巧

如果还是有问题,在发送邮件前强制打印变量值:

dd($offer->what_do_you); // 确认数据库中已正确保存该字段
// 或者打印传递给邮件类的参数
dd(['what_do_you' => $offer->what_do_you]);

如果输出是null,说明数据库中该字段为空,需要检查前端传参或数据库表结构(比如字段名是否拼写错误)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 00:50:27