在刀片中使用刀片

时间:2015-12-12 05:14:50

标签: php laravel-blade

在我的数据库中,我保存包含刀片标记的文本,如:

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);

这样用户可以使用[名称],我仍然想知道如何仅使用刀片。

2 个答案:

答案 0 :(得分:6)

如果不首先渲染PHP代码,就不能使用刀片串来编译它。您应该尝试自定义渲染类或调用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

答案 1 :(得分:0)

我使用了下面的电子邮件,要替换的所有动态变量都与电子邮件模板中的“{{$ name}}”相似。

我创建了一个数据数组并直接将其用于邮件库。这样,您可以随时替换邮件模板中的多个动态变量。

您需要将文本保留在电子邮件模板中,并使用数据库中的动态值。

如果您的电子邮件文本是动态的并且来自数据库,您可以使用该文本代替函数中的电子邮件模板,并传递$ data variables数组以一次性替换它们。

$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);
}); 

另一件事是尝试使用邮件的'队列'功能,因为它减少了负载并将电子邮件添加到laravel电子邮件队列并逐个发送

希望这可以帮助你:)