Laravel联系表单发邮件报htmlspecialchars()期望字符串却传入对象错误
报错原因
你遇到的这个报错是Laravel邮件功能的常见冲突问题:Laravel在渲染邮件模板时会自动注入内置的$message变量,该变量是Illuminate\Mail\Message类的实例对象,你向模板传递的自定义参数也使用了message作为键名,导致变量被覆盖。模板渲染调用htmlspecialchars处理内容时拿到的是对象而非你提交的字符串内容,就抛出了该错误。
修复步骤
1. 修改Controller邮件传参
修改ContactController.php中storeForm方法的Mail::send传参部分,把message键名改为不会冲突的自定义名称(比如user_message):
\Mail::send('email', array( 'name'=> $request->get('name'), 'phone'=> $request->get('phone'), 'email'=> $request->get('email'), // 替换原message键名,避免和内置变量冲突 'user_message'=> $request->get('message') ), function ($message) use ($request) { $message->from($request->email); $message->to('olindo.testing@gmail.com')->subject('Hello Admin | New Appointment'); });
2. 同步修改邮件模板变量调用
打开你的email.blade.php文件,把所有引用{{ $message }}输出用户留言的位置,全部替换为{{ $user_message }}即可。
可选优化:修复表单冗余属性
你提交的Contact.blade.php中表单标签重复定义了action属性,建议删除空的那个避免异常:
<!-- 修改前 --> <form action="" method="post" action="{{ route('contact.save') }}"> <!-- 修改后 --> <form method="post" action="{{ route('contact.save') }}">
内容的提问来源于stack exchange,提问作者ivanantonov
相关产品推荐
相关产品推荐

