在 blade 中使用 blade
Use blade in blade
在我的数据库中,我保存包含 blade 标记的文本,例如:
Hello {!! $name !!} how are you today.
我将此文本传递到变量 $text 中的电子邮件模板。在我使用的电子邮件中 {!! $text !!} 获取邮件中的文本。但是,当发送电子邮件时,它会显示 {!!符号而不是变量(也被传递)。
如何在我的数据库中保存 blade 标记并将其传递给我的代码以替换 {!! something !!} 用正确的变量?
我的邮件功能。
$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);
这样用户可以使用[name],我还是想知道如何只用blade。
我使用了如下的邮箱,所有要替换的动态变量都像邮箱模板中的'{{ $name }}'。
我创建了一个数据数组并直接与邮件库一起使用。这样您就可以随时随地替换邮件模板中的多个动态变量。
您需要将文本保留在电子邮件模板中并使用数据库中的动态值。
如果您的电子邮件文本是动态的并且来自数据库,您可以在函数中使用文本代替电子邮件模板并传递 $data 变量数组来一次性替换它们。
$data = array('name' => $customer->Name, 'InvoiceID' => $dueinvoice["InvoiceNumber"],'AmountDue' => $dueinvoice["AmountDue"],'DueDate' => $duedate ,'CurrencyCode' => $dueinvoice["CurrencyCode"]);
\Mail::queue('emails.DueDateNotification',$data, function($message) use($customer)
{
$message->subject('DueDate Notification');
$message->to($customer->EmailAddress);
});
另一件事是尝试对邮件使用 'queue' 功能,因为它可以减少负载并将电子邮件添加到 laravel 电子邮件队列并逐一发送
希望对您有所帮助:)
如果不首先渲染代码,就无法使用 blade-string 来编译 PHP 代码。您应该尝试自定义渲染 class 或调用 Blade。
public function send()
{
$emailText = Email::findOrFail(5);
$name = $order->billingname;
$mailtext = \Blade::compileString($emailText->text);
ob_start();
eval("?> $mailtext <?php");
$mailtext = ob_get_clean();
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!');
});
}
但是它并不安全,因为有 eval
。 [在 Laravel 5.1]
中测试
也有一些写得很好的软件包用于此特定目的,例如 StringBladeCompiler v3
在我的数据库中,我保存包含 blade 标记的文本,例如:
Hello {!! $name !!} how are you today.
我将此文本传递到变量 $text 中的电子邮件模板。在我使用的电子邮件中 {!! $text !!} 获取邮件中的文本。但是,当发送电子邮件时,它会显示 {!!符号而不是变量(也被传递)。 如何在我的数据库中保存 blade 标记并将其传递给我的代码以替换 {!! something !!} 用正确的变量?
我的邮件功能。
$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);
这样用户可以使用[name],我还是想知道如何只用blade。
我使用了如下的邮箱,所有要替换的动态变量都像邮箱模板中的'{{ $name }}'。
我创建了一个数据数组并直接与邮件库一起使用。这样您就可以随时随地替换邮件模板中的多个动态变量。
您需要将文本保留在电子邮件模板中并使用数据库中的动态值。
如果您的电子邮件文本是动态的并且来自数据库,您可以在函数中使用文本代替电子邮件模板并传递 $data 变量数组来一次性替换它们。
$data = array('name' => $customer->Name, 'InvoiceID' => $dueinvoice["InvoiceNumber"],'AmountDue' => $dueinvoice["AmountDue"],'DueDate' => $duedate ,'CurrencyCode' => $dueinvoice["CurrencyCode"]);
\Mail::queue('emails.DueDateNotification',$data, function($message) use($customer)
{
$message->subject('DueDate Notification');
$message->to($customer->EmailAddress);
});
另一件事是尝试对邮件使用 'queue' 功能,因为它可以减少负载并将电子邮件添加到 laravel 电子邮件队列并逐一发送
希望对您有所帮助:)
如果不首先渲染代码,就无法使用 blade-string 来编译 PHP 代码。您应该尝试自定义渲染 class 或调用 Blade。
public function send()
{
$emailText = Email::findOrFail(5);
$name = $order->billingname;
$mailtext = \Blade::compileString($emailText->text);
ob_start();
eval("?> $mailtext <?php");
$mailtext = ob_get_clean();
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!');
});
}
但是它并不安全,因为有 eval
。 [在 Laravel 5.1]
也有一些写得很好的软件包用于此特定目的,例如 StringBladeCompiler v3