2017-08-29 54 views
0

我在樹枝模板中有一個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

回答

2

是,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; 
    }