【问题标题】:Use blade in blade在刀片中使用刀片
【发布时间】:2016-03-18 03:15:10
【问题描述】:

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

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

这样用户就可以使用[name]了,我还是想知道怎么只用blade。

【问题讨论】:

  • 这是 PHP 吗?如果是,请记住使用双引号!例如:$name='a'; echo "Hello {!! $name !!} 你今天好吗。";
  • 可以显示发送邮件功能码吗?
  • 其他人已经创建了可能实现您所追求的解决方法:example 1example 2。您需要对这些内容进行编辑以满足您的特定需求,但它们可能是一个很好的起点。
  • @JayDhameliya 我添加了它。
  • 那么您想要此页面中可用的实际变量值吗?例如你好{!! $name !!} 而不是你想要 Hello somename here.. 我说的对吗?

标签: php laravel-blade


【解决方案1】:

如果不首先渲染它,您就不能使用刀片字符串来编译 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

【讨论】:

    【解决方案2】:

    我使用过如下邮件,所有要替换的动态变量都像邮件模板中的'{{ $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);
    }); 
    

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

    希望对你有帮助:)

    【讨论】:

      猜你喜欢
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 2013-11-22
      • 2022-01-01
      • 2016-12-18
      • 2017-10-17
      相关资源
      最近更新 更多