【问题标题】:Finding a blade variable inside string在字符串中查找刀片变量
【发布时间】:2016-11-29 17:53:51
【问题描述】:

我将 $emailtemplate 变量传递到视图中。

这个$emailtemplate是一个具有以下属性的模型

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

用户可以通过网站上的表单创建 $emailtemplate 的新实例,他们可以在其中填充上述每个字段。

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

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

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

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

{!! $emailtemplate->body !}}

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

即呈现的 HTML 正是

尊敬的 {{$user->first_name}}

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

我该如何解决这个问题?

感谢您的帮助

【问题讨论】:

  • 显示你将变量转换到视图的clouse。
  • 如果对您有帮助,请考虑将答案标记为已接受。

标签: laravel laravel-5.3


【解决方案1】:

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

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

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

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

这个评估的&lt;strong&gt;Dear Foo &lt;/strong&gt;将存储在$evaluatedTemplate

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

{!! $evaluatedTemplate !!}

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

【讨论】:

  • 非常感谢您的回答:)
  • 还有其他方法吗?我可以通过刀片运行 $view 对象吗?即我通过 $view = View::make('email_templates.preview', $data); 检索视图的第一次运行然后像 $view2 = View::make($view, ['first_name','Jordan']); 一样将 $view 对象传回返回 $view2;
  • @user3502651 不,据我所知这是不可能的,这就是为什么人们编写一些自定义包来实现这一点的原因。您可以使用toString 输出到文件,但不能从变量输入。
猜你喜欢
  • 2021-10-15
  • 2020-10-17
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-22
  • 2016-01-15
  • 1970-01-01
  • 2020-11-07
相关资源
最近更新 更多