Twig用变量[TWIG / PHP]设置变量名

时间:2016-01-19 14:43:15

标签: php variables twig

如何在Twig中使用另一个值的值设置变量的名称? 我认为它会是这样的:

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

但这不起作用。从中创建一个字符串将打破循环(因为它不搜索字符串) 我知道如何在PHP中执行此操作以便澄清,这是我想要实现的目标:

$args["answer1"]

返回

$('#mydiv').on('scroll', function(){
  function infiniScroll(this);
});

function infiniScroll(mydiv){
console.log($(mydiv).scrollTop()+' + '+ $(mydiv).height()+' = '+ ($(mydiv).scrollTop() + $(mydiv).height())   +' _ '+ $(mydiv)[0].scrollHeight  );

if($(mydiv).scrollTop() + $(mydiv).height() == $(mydiv)[0].scrollHeight){
    console.log('bottom found');
    if(!$.active){ //if there is no ajax call active ( last ajax call waiting for results ) do again my ajax call
        myAjaxCall();
    }
}

但这一次,不是用字符串而是操作性答案。

提前致谢!
Mats de Waard。

3 个答案:

答案 0 :(得分:7)

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

{{1}}

以下是关于_context和全局变量的the doc

答案 1 :(得分:0)

在这些情况下,您必须使用attribute()功能:

{% for row2 in attribute(args, 'answer' ~ queCount) %}
    ...
{% endfor %}

更多信息:http://twig.sensiolabs.org/doc/functions/attribute.html

答案 2 :(得分:0)

如果环境选项strict_variables设置为true(默认值为falsesee docs),@ pbenard的答案将导致致命错误,如果变量不是不存在。例如,如果answer3不存在,您可以得到如下内容:

  

致命错误:未捕获Twig_Error_Runtime:第9行“index”中不存在键“answer1,answer2,row,queCount,_parent,_seq,loop,_ key”的数组键“answer3”。

当该选项设置为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过滤器也是一件好事,以便稍后将选项设置为{{1}},而不必担心破坏现有代码。