Laravel邮件发送异常:模板变量未正确渲染显示
Laravel邮件模板Blade变量未解析的解决方案
以下是几个排查和解决该问题的关键点:
检查视图文件后缀
确保你的邮件视图文件后缀是.blade.php,比如contact.blade.php而非contact.php。Laravel仅会对带.blade.php后缀的文件解析Blade语法,普通.php文件会直接输出内容,变量不会被替换。确认邮件类的视图加载方式
在Contact邮件类的build()方法里,必须使用view()方法加载模板,不能用text()或者直接返回HTML字符串:// 正确:加载Blade视图 public function build() { return $this->view('emails.contact'); } // 错误:仅加载纯文本,不解析Blade // return $this->text('emails.contact');如果用
html()方法手动传入HTML内容,Blade语法不会被解析,这种情况建议改用view()加载模板文件。验证变量传递是否正确
确保变量已正确传递到视图中:
要么在view()后链式调用with()传递变量:public function build() { return $this->view('emails.contact') ->with('name', $this->name) ->with('message', $this->message); }要么把变量定义为邮件类的公共属性,Laravel会自动将这些属性共享到视图:
class Contact extends Mailable { public $name; public $message; public function __construct($name, $message) { $this->name = $name; $this->message = $message; } public function build() { return $this->view('emails.contact'); } }清除视图缓存
视图缓存可能导致修改不生效,运行命令清除缓存:php artisan view:clear生产环境可以重新生成视图缓存:
php artisan view:cache检查视图中的变量语法
确认视图里的Blade变量写法正确,比如{{ $name }},不要漏掉变量前的$符号,也不要写错大括号格式。如果需要输出HTML内容,使用{!! $htmlContent !!}(注意防范XSS攻击)。
内容的提问来源于stack exchange,提问作者ademuyiwa adekunle idowu
相关产品推荐
相关产品推荐

