树枝动态变量赋值

时间:2017-06-07 16:39:48

标签: php json symfony variables twig

我试图在循环内的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这样的模板引擎中处理它。

1 个答案:

答案 0 :(得分:1)

如果值实际上是可迭代的而不是单个json字符串,则可以将它们放在如下数组中:

{% set values = [] %}
{% for item in json %}
    {% set values = values|merge({(item.name): item.value}) %}
{% endfor %}

然后您可以使用values.firstName

如果它是一个json字符串,因此不能像这样循环。你需要在twig中编写一个基本的字符串解析器。我写了类似于上周this answer的内容。一般来说,这是一个非常糟糕的想法,因为它在很多场合失败了。