Php 细枝动态变量分配
我试图在循环内的细枝中动态分配变量。例如,这是传递到模板中的JSON:Php 细枝动态变量分配,php,json,symfony,variables,twig,Php,Json,Symfony,Variables,Twig,我试图在循环内的细枝中动态分配变量。例如,这是传递到模板中的JSON: [{ "name": "firstName", "value": "Adam", }, { "name": "Lastname", "value": "Human", }] 值得注意的是,我没有能力修改这个JSON格式,因为它来自第三方,所以我需要在模板方面解决这个问题 我想循环使用这个json并为每个对象创建变量,如下所示: {% for item in json %} {% set
[{
"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%}
及
没有运气
关于动态创建变量有什么想法吗?这在大多数编程语言中都是直截了当的,因此我很难理解在像Twig这样的模板引擎中是如何处理这一点的。如果值实际上是可迭代的,而不是单个json字符串,那么可以将它们放入如下数组中:
{% set values = [] %}
{% for item in json %}
{% set values = values|merge({(item.name): item.value}) %}
{% endfor %}
然后可以使用值。firstName
如果它是一个json字符串,因此不能像这样循环。您需要在twig中编写一个基本的字符串解析器。然而,我上周在《华尔街日报》上写了类似的文章。一般来说,这是一个非常糟糕的主意,因为它在很多情况下都会失败。请在控制器中执行。当发送到视图时,您应该准备好数据。@nerdlyist这不是一个选项。JSON由我无法控制的第三方传递给我。因此问题就来了。这并不排除您在将其发送到twig之前对其进行操作,除非您只允许访问模板文件。@JennevanderMeer我们在电子邮件发送提供商中使用twig进行动态脚本编写。所以在API调用和模板之间没有控制器。谢谢,我来试一试。我尝试了类似的方法,但它是通过初始化一个空对象而不是数组来实现的。我会让你知道它是否有效!
{% set values = [] %}
{% for item in json %}
{% set values = values|merge({(item.name): item.value}) %}
{% endfor %}