在字符串

时间:2016-11-29 08:03:28

标签: laravel laravel-5.3

我将$ emailtemplate变量传递给视图。

此$ emailtemplate是具有以下属性的模型

(string) 'from_name', (string) 'from_email', (string) 'subject', (string) 'body', (string) 'email_type', (integer) 'status'

用户可以通过网站上的FORM创建$ emailtemplate的新实例,在那里他们可以填充上面的每个字段。

用户填充到FORM中的正文的一个示例将是以下行(是的用户将HTML代码写入表单以存储在$ emailtemplate的body属性中):

<strong>Dear {{$user->first_name}} </strong>

我创建了一个允许用户“预览”电子邮件的视图。变量$ emailtemplate和$ user都传递给视图(对于预览的情况,$ user = Auth :: user())

资源/视图/电子邮件/ preview.blade.php

{!! $emailtemplate->body !}}

此“预览”视图正确呈现强样式,但不会识别刀片变量引用,因为它存储在文字字符串中。

即。呈现的HTML完全是

亲爱的{{$ user-&gt; first_name}}

这里出了什么问题?我想允许用户通过表单开发自己的电子邮件模板。我将$ emailtemplate和$ user传递给视图但是因为$ emailtemplate-&gt;正文是一个字符串数据类型Laravel无法识别括号之间使用刀片变量。

我该如何解决这个问题?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

你不能这样做,因为Laravel不会重新渲染刀片输出,以查看和替换由另一个变量注入的任何变量!

查看https://github.com/TerrePorter/StringBladeCompiler

因此,您应首先评估用户定义的模板,例如

<strong>Dear {{$user->first_name}} </strong>
will become:
<strong>Dear Foo </strong>

此评估<strong>Dear Foo </strong>将存储在$evaluatedTemplate

然后您可以在主刀片模板中使用它:

{!! $evaluatedTemplate !!}

另见: https://github.com/Flynsarmy/laravel-db-blade-compiler