php - Twig 动态变量赋值

标签 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 这样的模板引擎中处理它。

最佳答案

如果这些值实际上是可迭代的而不是单个 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/

相关文章:

php - 使用 PHP substr 从字符串中获取 "at most"最后 n 个字符?

php - Symfony3 Form 组件尝试将 null 传递给 PHP 7 中的类型提示方法

symfony - symfony2 应用程序上的 Angularjs

javascript - 如果不到 1 分钟,PHP 表单提交警报

php - HTML 属性中的空格

Node.js:express.json限制白名单

javascript - 解析大量数据 (5Mb) : eval or json? 的速度更快

json - 如何获取 Spark 驱动程序指标 json?

php - Homestead + Symfony 2.7 安装

php - 如何让多个位置 block 使用相同的命名@location