2017-08-29 9 views
0

私はforループをTwigテンプレートに持っています。ここでループは予測可能な順序で実行されますか?

{% 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テンプレートを使用しています)また、私は自分のマシンでそれを再現することもできません。これは常に正しい順序で表示されるようです。

Twigは、指定された配列順を尊重しますか?配列に文字列か整数キーがあるかどうかは違いがありますか?

+1

を小枝だとして順序を尊重しません間違いなく正しい順序でデータベースから出てきます。 Twigに渡される配列は正しい '?あなたが自分のマシンでこれを作ることができないと言うので、それはいくらか質問を提起します。 – 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; 
    } 
関連する問題