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

Laravel发送邮件时报错:Trying to access array offset on value of type null

问题描述

开发了一套在线预约表单系统,用户提交预约申请后会自动生成并发送邮件,但发送邮件时出现错误:Trying to access array offset on value of type null。

相关代码如下:

预约控制器中的store函数

$emailDataArray = array(
    'appointment_id' => $lastInsertedId,
    'patient_name' => $request->appointment_name,
    'patient_number' => $request->appointment_contact_no,
    'patient_age' => $request->appointment_age,
    'patient_gender' => $request->appointment_gender,
    'branch_name' => $branch_name->name,
    'doctor_name' => $doctor_name->name,
    'schedule_date' => $request->schedule_date,
    'schedule_time' => $schedule_time->schedule_time,
    'purpose' => $purpose->about_us,
);
$email = $this->sendMail($emailDataArray);

预约控制器中的sendMail函数

Mail::send('frontend.mail.mail', $emailDataArray, function($message) use ($emailDataArray)
{
    $message->to('arafat@lasermedicalbd.com')->subject('APPOINTMENT');
    $message->from('arafat@lasermedicalbd.com');
});

mail.blade.php模板

<p>PATIENT NAME &#09;: {{ $patient_name }}</p>
<p>PATIENT NUMBER &#09;: {{ $patient_number }}</p>
<p>PATIENT AGE &#09;: {{ $patient_age }}</p>
<p>PATIENT GENDER &#09;: {{ $patient_gender] }}</p>
<p>BRANCH NAME &#09;: {{ $branch_name }}</p>
<p>DOCTOR NAME &#09;: {{ $doctor_name}}</p> 
<p>DATE &#09;: {{ $schedule_date }}</p>
<p>TIME &#09;: {{ $schedule_time }}</p>
<p>PURPOSE &#09;: {{ $purpose }}</p>

请问该如何解决这个错误?


解决方案

这个错误由两方面问题导致,逐个修复即可:

  1. 修复Blade模板语法错误
    你的mail.blade.php里有两处语法问题:

    • {{ $patient_gender] }}的闭合符号错误,应改为{{ $patient_gender }}
    • {{ $doctor_name}}建议补全空格写成{{ $doctor_name }},避免潜在语法解析问题
  2. 处理null对象的属性访问
    在store函数中,$branch_name、$doctor_name、$schedule_time、$purpose这些对象可能为null,直接访问->name等属性会触发报错。可以用PHP的空安全运算符和空合并运算符处理:

    $emailDataArray = array(
        'appointment_id' => $lastInsertedId,
        'patient_name' => $request->appointment_name,
        'patient_number' => $request->appointment_contact_no,
        'patient_age' => $request->appointment_age,
        'patient_gender' => $request->appointment_gender,
        'branch_name' => $branch_name?->name ?? '未指定',
        'doctor_name' => $doctor_name?->name ?? '未指定',
        'schedule_date' => $request->schedule_date,
        'schedule_time' => $schedule_time?->schedule_time ?? '未指定',
        'purpose' => $purpose?->about_us ?? '未填写',
    );
    

    这样即使对象为null,也会用默认值替代,避免报错。

  3. 额外排查建议

    • 调用sendMail前,先dd($emailDataArray)打印数组,确认所有字段都有有效值
    • 检查请求参数是否存在,比如用$request->input('appointment_name', '未知')替代直接取值,避免请求参数缺失导致的null问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:23:17