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 	: {{ $patient_name }}</p> <p>PATIENT NUMBER 	: {{ $patient_number }}</p> <p>PATIENT AGE 	: {{ $patient_age }}</p> <p>PATIENT GENDER 	: {{ $patient_gender] }}</p> <p>BRANCH NAME 	: {{ $branch_name }}</p> <p>DOCTOR NAME 	: {{ $doctor_name}}</p> <p>DATE 	: {{ $schedule_date }}</p> <p>TIME 	: {{ $schedule_time }}</p> <p>PURPOSE 	: {{ $purpose }}</p>
请问该如何解决这个错误?
解决方案
这个错误由两方面问题导致,逐个修复即可:
修复Blade模板语法错误
你的mail.blade.php里有两处语法问题:{{ $patient_gender] }}的闭合符号错误,应改为{{ $patient_gender }}{{ $doctor_name}}建议补全空格写成{{ $doctor_name }},避免潜在语法解析问题
处理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,也会用默认值替代,避免报错。
额外排查建议
- 调用
sendMail前,先dd($emailDataArray)打印数组,确认所有字段都有有效值 - 检查请求参数是否存在,比如用
$request->input('appointment_name', '未知')替代直接取值,避免请求参数缺失导致的null问题
- 调用
内容的提问来源于stack exchange,提问作者Arafat
相关产品推荐
相关产品推荐

