我试图在循环内的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这样的模板引擎中处理它。
答案 0 :(得分:1)
如果值实际上是可迭代的而不是单个json字符串,则可以将它们放在如下数组中:
{% set values = [] %}
{% for item in json %}
{% set values = values|merge({(item.name): item.value}) %}
{% endfor %}
然后您可以使用values.firstName
。
如果它是一个json字符串,因此不能像这样循环。你需要在twig中编写一个基本的字符串解析器。我写了类似于上周this answer的内容。一般来说,这是一个非常糟糕的想法,因为它在很多场合失败了。