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

Laravel 7(PHP 7.4)使用TinyEditor编辑的邮件模板变量无法正常替换问题求助

解决Laravel邮件模板中TinyEditor编辑内容的变量无法替换问题

我明白你遇到的问题了——后台用TinyEditor编辑的邮件模板里有{{$name}}这类变量占位符,但发送邮件时这些标识根本没被替换成真实的用户名。其实核心原因很简单:Blade不会二次解析已经通过{!! !!}输出的静态内容,你直接输出模板文本的话,里面的{{$name}}就只是普通字符串而已。

下面给你两种可行的解决方案,按安全性和易用性排序:


方案1:手动批量替换变量(推荐)

这种方法最安全可控,适合用户编辑模板的场景。我们直接把模板里的占位符替换成真实值,再传递给视图输出。

控制器代码修改:

$name = $user->name;
$template = Template::where('code',1)->first();

// 定义需要替换的变量映射,支持多个变量
$replaceMap = [
    '{{$name}}' => $name,
    // 如果还有其他占位符,比如{{$adminContact}},可以继续加在这里
    // '{{$adminContact}}' => 'support@example.com'
];

// 批量替换模板内容里的占位符
$emailContent = strtr($template->text_email, $replaceMap);

Mail::send('mail.user', compact('emailContent'), function ($message) use ($email, $fullname) {
    $message->from('your-sender-email@example.com');
    $message->subject('test');
    $message->to($email, $fullname);
});

对应的Blade模板(mail/user.blade.php):

{!! $emailContent !!}

方案2:用Blade编译器动态编译模板字符串

如果你确实想让Blade解析模板里的{{}}语法,可以用Laravel自带的Blade编译器来编译字符串内容。但要注意:如果模板是由普通用户编辑的,这种方法有代码注入风险,务必谨慎使用!

控制器代码修改:

use Illuminate\View\Compilers\BladeCompiler;
use Illuminate\Filesystem\Filesystem;

$name = $user->name;
$template = Template::where('code',1)->first();

// 初始化Blade编译器
$bladeCompiler = new BladeCompiler(new Filesystem(), storage_path('framework/views'));
// 编译模板字符串为可执行的PHP代码
$compiledCode = $bladeCompiler->compileString($template->text_email);

// 执行编译后的代码,获取最终内容
ob_start();
// 把变量注入到当前作用域,让编译后的代码能访问到
eval('?>' . $compiledCode);
$emailContent = ob_get_clean();

Mail::send('mail.user', compact('emailContent'), function ($message) use ($email, $fullname) {
    $message->from('your-sender-email@example.com');
    $message->subject('test');
    $message->to($email, $fullname);
});

对应的Blade模板同样只需输出编译后的内容:

{!! $emailContent !!}

为什么你之前的尝试没用?

你之前在Blade里写的@php echo $name; @endphp或者{{ !! $name !! }},都是在Blade模板本身里输出变量,而TinyEditor编辑的{{$name}}是模板文本里的静态字符串——Blade只会解析模板文件里的语法,不会去解析已经输出的字符串内容,所以这些写法自然不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:12:44