2014-12-29 6 views
7

में "जबकि" और "दोहराना" लूप Twig में loops को दोहराने और दोहराने के लिए कोई अच्छा तरीका है? यह इतना आसान काम है, लेकिन मैक्रोज़ के बिना मुझे कुछ भी अच्छा और सरल नहीं मिल रहा है।ट्विग

कम से कम एक अनंत चक्र करें और फिर इसे किसी शर्त में तोड़ दें?

संपादित करें:

मेरा मतलब है कुछ की तरह

do { 
    // loop code 
} while (condition) 

या

while (condition) { 
    // loop code 
} 

संपादित करें 2:

ऐसा लगता है कि टहनी इसी कारण से मूल रूप से समर्थित नहीं है के रूप में यह है समर्थित नहीं है continue; या break; बयान।

https://github.com/twigphp/Twig/issues/654

+0

वहाँ भी 'स्थिति if', लेकिन क्या आपके सवाल का ठीक है, टहनी में एक' for' और 'foreach' बयान है? – KhorneHoly

+0

कुछ उदाहरण जोड़े जो मैं बिल्कुल देख रहा हूं। – Aistis

+0

# एस्टिस मुझे एक ही समस्या का सामना करना पड़ता है ... (शर्त) {} ... का उपयोग करने की आवश्यकता होगी, लेकिन ऐसा लगता है कि यह TWIG में उपलब्ध नहीं है। लेकिन आप कहते हैं कि मैक्रो ऐसा करने का एक तरीका हो सकता है। क्या आप इसके बारे में अधिक जानकारी दे सकते हैं क्योंकि मैंने कभी भी सिम्फनी के साथ मैक्रो का उपयोग नहीं किया है। –

उत्तर

6

संक्षेप में: कोई। यह कार्यक्षमता उन्नत तर्क का तात्पर्य है, जो आपके व्यापार तर्क में होना चाहिए, टेम्पलेट परत में नहीं। यह एमवीसी में चिंताओं को अलग करने का एक प्रमुख उदाहरण है।

टवीग for-loops पूरी तरह से समर्थन करता है, जो कि यदि आप सही तरीके से कोड करते हैं तो पर्याप्त होना चाहिए - उस जटिल सशर्त निर्णय होने पर डेटा को प्रदर्शित करने के लिए डेटा तर्क में लिया जाता है, जहां वे संबंधित होते हैं, जिसके परिणामस्वरूप 'प्रस्तुत करने के लिए तैयार' टेम्पलेट्स। टिग फिर प्रतिपादन के लिए आवश्यक सभी अच्छी सुविधाओं का समर्थन करता है।

+3

समस्या यह है कि मुझे एक नेस्टेड सरणी मुद्रित करने की आवश्यकता है। एक शर्त है जिसे इसे दोबारा मुद्रित नहीं किया जाना चाहिए, लेकिन ** इसे ** **। मुझे यकीन नहीं है कि यह वास्तव में इतना उन्नत तर्क है कि इसे बैक-एंड में प्रीप्रोसेस्ड किया जाना चाहिए। – Aistis

+0

आपको टवीग में नेस्टेड सरणी को संसाधित करने के लिए न तो 'करने' और न ही 'जबकि' की आवश्यकता है। आप जो करना चाहते हैं वह शायद एक साधारण मैक्रो के साथ आसानी से किया जाता है। इस सवाल को एक चमकदार [XY समस्या] बनाता है (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) हालांकि - आपने अपने इच्छित समाधान के बारे में पूछा, असली समस्या नहीं हल करने की कोशिश कर रहा है। अब आप मुझे छोड़ देते हैं और हममें से बाकी बस अनुमान लगाते हैं कि आप वास्तव में क्या हासिल करना चाहते हैं। –

+1

आपकी चिंता के लिए नील्स धन्यवाद, लेकिन ** मैं दिलचस्प था कि टिग वास्तव में 'do' और' while' के कार्यान्वयन ** नहीं है। उपर्युक्त टिप्पणी के साथ, मैं बस यह इंगित करना चाहता हूं कि कुछ ऐसे मामले हैं जहां इन प्रकार के चक्र एक चालाक विकल्प हो सकते हैं। मैं अपनी विशेष समस्या का जवाब नहीं देख रहा हूं। क्षमा करें अगर हमने एक-दूसरे को गलत समझा है। – Aistis

6

मैं टहलने में लूप के लिए एक सरल लागू करने में सक्षम था। तो निम्नलिखित php बयान:

for ($x = 0; $x <= 10; $x++) { 
    echo "The number is: $x <br>"; 
} 

जब टहनी में अनुवाद किया है:

{% for i in 0..10 %} 
    * {{ i }} 
{% endfor %} 

थोड़ा समय पाश लेकिन एक संभावित वैकल्पिक हल नहीं है। सबसे अच्छा सुझाव है कि इस तरह के व्यापार तर्क को टेम्पलेट परत से बाहर छोड़ना है।

+0

क्षमा करें, मुझे नहीं लगता कि यह एक सशर्त पाश के प्रतिस्थापन कैसे है। – Aistis

0

यह संभव है, लेकिन थोड़ा जटिल है।

आप नेस्टेड सरणी को संसाधित करने के लिए {% include ... %} का उपयोग कर सकते हैं, जो मैंने पढ़ी टिप्पणियों से आपको क्या करना है।

nested_array_display.html

<ul> 
{% for key, val in arr %} 
    <li> 
     {{ key }}: 
{% if val is iterable %} 
{% include 'nested_array_display.html' %} 
{% else %} 
     {{ val }} 
{% endif %} 
    </li> 
{% endfor %} 
</ul> 
4

आप एक पर्याप्त उच्च पाश सीमा (10000 का उपयोग करके for ... in ... if साथ यह अनुकरण कर सकते हैं:

निम्नलिखित कोड पर विचार करें?)

जबकि

पीएचपी:

$precondition = true; 
while ($precondition) { 
    $precondition = false; 
} 

टहनी:

{% set precondition = true %} 
{% for i in 0..10000 if precondition %} 
    {% set precondition = false %} 
{% endfor %} 

है जबकि

पीएचपी:

do { 
    $condition = false; 
} while ($condition) 

टहनी:

{% set condition = true %} {# you still need this to enter the loop#} 
{% for i in 0..10000 if condition %} 
    {% set condition = false %} 
{% endfor %}