Twig动态变量赋值

3

我将尝试在Twig循环内动态分配变量。例如,以下是传递到模板中的JSON:

[{
   "name": "firstName",
   "value": "Adam",
 },
 {
   "name": "Lastname",
   "value": "Human",
 }]

值得注意的是,我没有修改这个JSON格式的能力,因为它来自第三方,所以我需要在模板方面解决这个问题。

我想循环遍历这个JSON,并为每个对象创建变量,如下所示:

{% for item in json %}
    {% set {{item.name}} = item.value %}
{% endfor %}

这个问题在Twig中的解决方案是,它会假定我要将值分配给字面量,而我想将值分配给一个已经评估过的变量名。这样,我就可以在模板中只引用数组中的每个项,如{{firstName}},并返回"Adam"。

我尝试了许多不同的方法来强制Twig动态创建一个变量数组,例如:

{% set (item.name) = item.value %}

{% set options = {} %}
{% for item in json %}
    {% set options[item.name] = item.value %}
{% endfor %}

运气不好。

有没有关于动态创建变量的想法?这在大多数编程语言中都很简单,所以我很难理解在像Twig这样的模板引擎中如何处理它。


3
请在控制器中完成此操作。 - u_mulder
当数据发送到视图时,您应该准备好数据。 - nerdlyist
2
这并不真正排除您在将其发送到Twig之前对其进行操作,除非您只允许访问模板文件。 - Jenne
@JennevanderMeer,我们在电子邮件发送提供程序中使用Twig进行动态脚本编写。因此,在API调用和模板之间没有控制器。 - AdamPat
@AdamPat 你可以在它们之间放一个吗?Twig 不是用于动态脚本编写的,而是用于模板化的。 - nerdlyist
显示剩余2条评论
1个回答

4
如果这些值实际上是可迭代的而不是单个的JSON字符串,你可以将它们放入一个数组中,例如:
如果值实际上是可迭代的而不是单个的JSON字符串,您可以像下面这样将它们放入一个数组中:
{% set values = [] %}
{% for item in json %}
    {% set values = values|merge({(item.name): item.value}) %}
{% endfor %}

然后你可以使用values.firstName

如果它是一个json字符串,因此不能像这样循环。您需要在twig中编写基本的字符串解析器。我上周写了类似的东西在这个答案中。然而,一般来说这是一个非常糟糕的主意,因为它在许多场合都会失败。


谢谢,我会试一下。我之前尝试过类似的东西,但是用的是初始化一个空对象 {} 而不是数组 []。如果成功了我会告诉你的! - AdamPat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接