Twig for循环以可预测的顺序运行吗?

Twig for循环以可预测的顺序运行吗?

问题描述:

我在树枝模板中有一个for循环。Twig for循环以可预测的顺序运行吗?

{% for v in details.variants %} 

这里details.variants是来自一个数据库的数组:

[variants] => Array 
    (
     [0] => Array 
      (
       [Id] => 8711 
       [Title] => Variant the First 
       [Code] => 
       [Price] => 6989.99 
      ) 

     [1] => Array 
      (
       [Id] => 8713 
       [Title] => Variant the Second 
       [Code] => 
       [Price] => 769.99 
      ) 

    ) 

出于某种原因,在呈现的HTML,变体的第二次出现,然后再变第一。数据以正确的顺序出现在数据库中,并且传递给Twig的数组是正确的。

这是从一个页面到另一个不一致。有些是正确的顺序;有些不是。但是,每个单独的页面都是一致的:多个刷新显示相同的顺序。 (所有这些页面都使用相同的树枝模板。)我也无法在自己的机器上重现它,它似乎始终显示正确的顺序。

Twig是否尊重提供的数组顺序?数组是否具有字符串或整数键是否有所作用?

+1

你是如何确保'的数据是绝对以正确的顺序从数据库中出来,传递给Twig的e数组是正确的?既然你说你不能在你自己的机器上生产这个,就会引发一些问题。 – Nima

是,twig不尊重秩序,因为它只是一个foreach

枝杈

{% set variants = [ 
    {'foo':'bar', }, 
    {'foo':'foo', }, 
] %} 

{% for variant in variants %} 
    {{ variant.foo }} 
{% endfor %} 

PHP

protected function doDisplay(array $context, array $blocks = array()) 
    { 
     // line 1 
     $context["variants"] = array(0 => array("foo" => "bar"), 1 => array("foo" => "foo")); 
     // line 5 
     echo " 
"; 
     // line 6 
     $context['_parent'] = $context; 
     $context['_seq'] = twig_ensure_traversable((isset($context["variants"]) || array_key_exists("variants", $context) ? $context["variants"] : (function() { throw new Twig_Error_Runtime('Variable "variants" does not exist.', 6, $this->getSourceContext()); })())); 
     foreach ($context['_seq'] as $context["_key"] => $context["variant"]) { 
      // line 7 
      echo " "; 
      echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->getSourceContext(), $context["variant"], "foo", array()), "html", null, true); 
      echo " 
"; 
     } 
     $_parent = $context['_parent']; 
     unset($context['_seq'], $context['_iterated'], $context['_key'], $context['variant'], $context['_parent'], $context['loop']); 
     $context = array_intersect_key($context, $_parent) + $_parent; 
    }