2012-12-14 13 views
32

क्या यह जांचना संभव है कि दिया गया चर Twig में स्ट्रिंग है या नहीं?जांचें कि क्या चर स्ट्रिंग या सरणी है Twig

अपेक्षित समाधान:

messages.en.yml:

hello: 
    stranger: Hello stranger ! 
    known: Hello %name% ! 

Twig टेम्पलेट:

{% set title='hello.stranger' %} 
{% set title=['hello.known',{'%name%' : 'hsz'}] %} 

{% if title is string %} 
    {{ title|trans }} 
{% else %} 
    {{ title[0]|trans(title[1]) }} 
{% endif %} 

यह यह इस तरह से करने के लिए संभव है? या शायद आपके पास बेहतर समाधान है?

{% if title[0] is not defined %} 
    {{ title|trans }} 
{% else %} 
    {{ title[0]|trans(title[1]) }} 
{% endif %} 

बदसूरत, लेकिन काम करता है:

+2

आप शायद 'iterable' परीक्षण के साथ कुछ कर सकते हैं? http://twig.sensiolabs.org/doc/tests/iterable.html –

उत्तर

86

परीक्षण iterable के साथ किया जा सकता है, twig1.7 में जोड़ा, के रूप में Wouter जम्मू टिप्पणी में कहा गया है:

{# evaluates to true if the foo variable is iterable #} 
{% if users is iterable %} 
    {% for user in users %} 
     Hello {{ user }}! 
    {% endfor %} 
{% else %} 
    {# users is probably a string #} 
    Hello {{ users }}! 
{% endif %} 

संदर्भ: iterable

+1

पर कुछ भी नहीं है, तो यह काम नहीं करेगा नोट: अन्य ऑब्जेक्ट भी 'पुनरावृत्त' हो सकते हैं भले ही वे नहीं हैं एक 'सरणी'। अगर कोई सरणी है तो Iterable एक सही परीक्षण नहीं है। मेरे पास एक जवाब है कि सरणी परीक्षण कैसे करें {'% यदि मान सरणी%}' नीचे है। http://stackoverflow.com/a/29642662/417822 –

9

ठीक है, मैं इसके साथ किया था।

+7

अगर सरणी के पास '[0]' इंडेक्स –

7

मैं iterable पाया अन्य के बाद से पर्याप्त नहीं होने के लिए ऑब्जेक्ट्स भी पुनरावर्तनीय हो सकते हैं, और array से स्पष्ट रूप से भिन्न हैं।

इसलिए कोई आइटम is_array एक और अधिक स्पष्ट है या नहीं, यह जांचने के लिए एक नया Twig_SimpleTest जोड़ना। आप इसे अपने ऐप कॉन्फ़िगरेशन में जोड़ सकते हैं/twig बूटस्ट्रैप होने के बाद।

$isArray= new Twig_SimpleTest('array', function ($value) { 
    return is_array($value); 
}); 
$twig->addTest($isArray); 

प्रयोग बहुत साफ हो जाता है:

{% if value is array %} 
    <!-- handle array --> 
{% else %} 
    <!-- handle non-array --> 
{% endif % } 
+0

यहां एक साइडेनोट: यह परीक्षण ArrayAcces, Traverseable, को लागू करने वाले प्रत्येक कस्टम ऑब्जेक्ट के लिए झूठा वापस आ जाएगा ... – DarkBee

+0

ठीक है, लेकिन मुख्य मुद्दा यह है कि सभी 'पुन: प्रयोज्य' आइटम नहीं बराबर हैं। एक 'पुनरावर्तनीय' की संरचना प्रकार के आधार पर अलग दिख सकती है। –

+0

जहां इस वर्ग फ़ाइल को Symfony2 में रखा जाना चाहिए? – Aerendir

संबंधित मुद्दे