Laravel发送新用户注册邮件通知报Undefined variable $user错误如何修复
问题根因
你在通知类的toMail方法中调用markdown邮件模板时,没有将通知类中已经注入的$user变量传递给模板,导致Blade渲染时找不到对应变量抛出错误。
修复方案
修改RegisteredUsers通知类的toMail方法,链式调用with()方法把user变量传给视图即可解决报错:
public function toMail($notifiable) { return (new MailMessage) ->markdown('mail.registered.user', [ 'user' => $this->user ]); }
其他必要优化点
- 删除密码输出逻辑:你代码中用户密码已经做了Hash加密,输出给管理员没有任何意义,还会造成严重安全隐患,直接删掉Blade模板里
{{ $user->password }}这一行即可。 - 替换
env()调用方式:Laravel执行config:cache后,所有业务代码中的env()调用都会返回null,建议你把Twilio配置写到config/services.php中,后续用config()方法读取:
先在config/services.php添加配置:
控制器中读取配置改为:'twilio' => [ 'auth_token' => env('TWILIO_AUTH_TOKEN'), 'sid' => env('TWILIO_SID'), 'verify_sid' => env('TWILIO_VERIFY_SID'), ]$token = config('services.twilio.auth_token'); $twilio_sid = config('services.twilio.sid'); $twilio_verify_sid = config('services.twilio.verify_sid'); - 检查name字段逻辑:你的Blade模板里调用了
$user->name,但控制器创建用户时没有录入name字段,如果用户表没有这个字段会引发新报错,要么补上name字段的提交和存储逻辑,要么删掉模板里的对应调用。 - 创建用户优先用验证后的数据:控制器中
User::create尽量用验证完成的$data数组取值,不要直接用$request取值,避免存入未验证的非法数据。
内容的提问来源于stack exchange,提问作者INSIDECAMPUS TV
相关产品推荐
相关产品推荐

