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
相关产品推荐
相关产品推荐

