我正在尝试在循环内动态分配 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 这样的模板引擎中处理它。
最佳答案
如果这些值实际上是可迭代的而不是单个 json 字符串,您可以将它们放在一个数组中,例如:
{% set values = [] %}
{% for item in json %}
{% set values = values|merge({(item.name): item.value}) %}
{% endfor %}
然后你可以使用values.firstName
。
如果是json字符串,就不能这样循环了。您需要在 Twig 中编写一个基本的字符串解析器。我上周在 this answer 中写过类似的东西然而。总的来说,这是一个非常糟糕的主意,因为它在很多场合都失败了。
关于php - Twig 动态变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44418383/