Twig如何用一个变量名来设置另一个变量的值? [TWIG/PHP]

3

我该如何在Twig中使用一个变量的值来设置另一个变量的名称?我认为应该像这样:

{% set queCount = loop.index %}
{% for row2 in answer+queCount %}

但这并不起作用。从那里制作一个字符串也会破坏循环(因为它不会搜索字符串)。 我知道如何在PHP中实现这一点,因此为了澄清,这就是我想要实现的:

$count = 1;
$args["answer$count"]

该函数返回

$args["answer1"]

但这一次,不是通过字符串而是操作数来实现答案。
提前致谢!
马茨·德瓦尔德。
3个回答

7
您可以使用_context变量。
{% set queCount = loop.index %}
{% for row2 in _context['answer' ~ queCount] %}

这里是关于_context和全局变量的文档


我认为那应该可以工作,但似乎并没有。有没有办法查看值是什么?(通过某种回显/打印方式?)这样我就可以提供更多关于哪里出了问题的信息了? - Mats de Waard
在您的模板中,输入 {{ dump(_context) }} - BENARD Patrick
1
之前有一个小错别字,我已经修改了,@MatsdeWaard你现在可以再试一下。顺便说一句,我喜欢你的昵称;想象一下你在面试时告诉别人“嘿,伙计这是我的SO账号,看看吧”:P - Alain Tiemblo
@AlainTiemblo 谢谢老兄!这个很好用!+1 :D 我没想到答案可以是字符串,我还以为不能是字符串呢。感谢你 :) - Mats de Waard
@AlainTiemblo 谢谢 xD 这是我每天对自己的代码说的话。但是对于一次面试来说,现在这并不重要,我有一个小学位证书(bac+6 month),在法国我并不被视为一个真正的开发者。PS0:感谢您的编辑,PS1:感谢您的工作(twig fiddle)!PS2:您已经解密了我的昵称,非常抱歉没有礼貌。 - BENARD Patrick

0
如果环境选项strict_variables被设置为true(默认值为false参见文档),@pbenard的答案将会导致致命错误,如果变量不存在。例如,如果answer3不存在,则会得到如下错误信息:

Fatal error: Uncaught Twig_Error_Runtime: Key "answer3" for array with keys "answer1, answer2, row, queCount, _parent, _seq, loop, _key" does not exist in "index" at line 9.

当选项设置为false时,不存在的变量会被静默地设为null。(这就是为什么您没有收到错误消息。)
您可以通过使用default过滤器提供一个默认值来避免该问题:
{% set queCount = loop.index %}
{% for row2 in _context['answer' ~ queCount]|default(null) %}

您也可以省略值,甚至括号。变量将默认为空字符串。最终结果是相同的,因为null和空字符串都是假值,在for循环中会被跳过。也就是说,这两个是相等且有效的:

{% for row2 in _context['answer' ~ queCount]|default() %}

{% for row2 in _context['answer' ~ queCount]|default %}

我认为通常最好将 strict_variables 设置为 true,以避免由于变量名中的拼写错误等意外错误。即使它被设置为 false,在这种情况下使用 default 过滤器也是一个好习惯,这样您可以稍后将选项设置为 true,而不必担心破坏现有代码。

0

这并不能解决我的问题,因为我只想将 queCount 的值添加到运算符“answer”中(args 不会涉及)。 - Mats de Waard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接