HTML呈现标记内的Laravel变量

时间:2019-03-03 06:20:37

标签: laravel email templates

我想制作一个动态电子邮件模板。 “动态”是指用户可以更改内容:HTML(静态文本)和PHP标记(名称或地址)。

这是问题所在

  • 我试图将整个模板另存为HTML到数据库中,并使用{!! $data->value !!}进行调用。
  • 该模板有效,并呈现为HTML标签。
  • 但是,未呈现PHP标记。它保持这样:{{ $demo->demo_one }},当我发送电子邮件时。

有人知道如何将PHP标记转换为其价值吗?也许还有另一种制作动态电子邮件模板的方法?

感谢您的帮助,谢谢。

3 个答案:

答案 0 :(得分:1)

似乎您必须重新编译代码:

{!! Blade::compileString($demo->demo_one) !!}

答案 1 :(得分:0)

感谢艾哈迈德·努尔的回答,我可以找到另一种方式

我做了什么:

复制此功能

function render($__php, $__data)
{
    $obLevel = ob_get_level();
    ob_start();
    extract($__data, EXTR_SKIP);
    try {
        eval('?' . '>' . $__php);
    } catch (Exception $e) {
        while (ob_get_level() > $obLevel) ob_end_clean();
        throw $e;
    } catch (Throwable $e) {
        while (ob_get_level() > $obLevel) ob_end_clean();
        throw new FatalThrowableError($e);
    }
    return ob_get_clean();
}

然后调用这样的函数

foreach ($data as $key) {
        //first i need to get the template from database
        $template = Blade::compileString($key->value);
        $objDemo->template = $this->render($template, ['receiver' => 'Raven', 'demo_one' => 'Demo One Value', 'demo_two' => 'Demo Two Value', 'sender' => 'SenderUserName']);
    }

答案 2 :(得分:0)

您可以在您的刀片文件中执行此操作(将 $email_content 视为用户配置的电子邮件内容):

fgetc()