2016-09-08 3 views
0

나는 마침내 Drupal7에서 Symfony3으로 나의 사이트를 전환하고있다.Twig에서 키 - 값 배열을 반복 하시겠습니까?

레이아웃을 .twig로 마이그레이션하는 중입니다.

루프 및 키 - 값 배열에 대한 질문이 있습니다.

제가 다른 태그에서 특정 배열 요소를 참조 할 수있는 K/V 어레이

{% set test = { 
     sec1: { 
      title: "title 1", 
      content: "content 1" 
     }, 
     sec2: { 
      title: "title 2", 
      content: "content 2" 
     }, 
    } 
%} 

구성했다. 예 : 의도 한대로 작동합니다.

<ul> 
    <li> 
     <h1>{{ test.sec1.title }}</h1> 
     <div> 
      <p>{{ test.sec1.content }}</p> 
     </div> 
    </li> 
</ul> 

이제 루프 수를 늘리거나 반복합니다. 그러나이 시도

<ul> 
{% for i in 1..5 %} 
    <li> 
     <h1>{{ test.sec{{ i }}.title }}</h1> 
     <div> 
      <p>{{ test.sec{{ i }}.content }}</p> 
     </div> 
    </li> 
{% endfor %} 
</ul> 

화재 오류

Unexpected token "punctuation" of value "{" ("end of print statement" expected) in default/index.html.twig at line 67. 
500 Internal Server Error - Twig_Error_Syntax 

나는이

http://twig.sensiolabs.org/doc/tags/for.html#iterating-over-keys 

의 변화와 함께 일한지 아직 일을 아무것도 얻을 수 없습니다.

키 - 값 배열에서 secN을 통해이 목록을 반복하는 올바른 방법은 무엇입니까?

답변

1

스크립트가 작동하지 않는 이유는 이와 같이 개체 속성 접근자를 작성할 수 없기 때문입니다. iteration over key and value :

{% for key, sec in test %} 
    {{ sec.title }} 
    {{key}} 
{% endfor %} 

당신이 필요로하는 경우 실제로 키에 액세스해야하는 경우,

{% for sec in test|slice(0, 5) %} 
    {{ sec.title }} 
{% endfor %} 

또는 :

당신이 아마 필요한 것은 iterating over a subset입니다 여전히 키에 액세스하는 동안 슬라이스하려면, loop variables에 체크 : 속임수를 썼는지

{% for key, sec in test %} 
    {% if loop.index0 < 5 %} 
     {{ sec.title }} 
     {{key}} 
    {% endif %} 
{% endfor %} 
+0

, 감사합니다! 더 재미있는 것은 '슬라이스'에 대해 배우는 것이 었습니다! 유용한 ... – unknown

관련 문제