在我的数据库中,我保存包含刀片标记的文本,如:
Hello {!! $name !!} how are you today.
我将此文本传递给变量$ text中的电子邮件模板.在我用的电子邮件{!! $ text !!}获取邮件中的文本.但是当电子邮件发送时它会显示{!! 标志而不是变量(也通过).如何在我的数据库中保存刀片标记并将其传递给我需要替换的代码{!! 有正确变量的东西!!}
我的邮件功能.
$email = $order->email; $name = $order->billingname; //The text From the database. $emailText = Email::findOrFail(5); $mailtext = $emailText->text; Mail::send('emails.tracktrace', ['text'=>$mailtext'email' => $email, 'name' => $name], function ($m) use ($code, $email, $name) { $m->from('info@domain.com', 'domain'); $m->to($email, $name)->subject('Track your package!'); });
更新
我有一个解决方法,我做:
$mailtext = str_replace('[name]', $name, $mailtext);
这样用户可以使用[名称],我仍然想知道如何仅使用刀片.
编译PHP代码时不能使用刀片串而不首先渲染它.您应该尝试自定义渲染类或调用Blade.
public function send() { $emailText = Email::findOrFail(5); $name = $order->billingname; $mailtext = \Blade::compileString($emailText->text); ob_start(); eval("?> $mailtext $mailtext, 'email' => $email, 'name' => $name ], function ($m) use ($code, $email, $name) { $m->from('info@domain.com', 'domain'); $m->to($email, $name)->subject('Track your package!'); }); }
然而,因为有一个不安全eval
.[在Laravel 5.1中测试过]
此外,还有一些编写良好的软件包用于此特定目的,如StringBladeCompiler v3