2012-02-13 22 views
8

इसमें बदलाव के बाद संशोधन को बनाए रखने के लिए एक ट्वेंग ग्लोबल वैरिएबल कैसे प्राप्त किया जा सकता है? मेरा वांछित आउटपुट "गहरा सेट" है, हालांकि मुझे "मूल सेटिंग" मिलती है।सिम्फनी 2 + ट्विग ग्लोबल वैरिएबल

एप्लिकेशन/config/config.yml

twig: 
    globals: 
     testvar: "original setting" 

root.html.twig

{% include "MyBundle::levelone.html.twig" %} 
{{ testvar }} 

levelone.html.twig

{% set testvar = "set @ levelone" %} 
{% include "MyBundle::deeper.html.twig" %} 

deeper.html.twig

{% set testvar = "set @ deeper" %} 
+0

आप ब्लॉक के भीतर की कोशिश की? मेरा मतलब है, '{% ब्लॉक global_test%}' 'के साथ अपने सभी' {% सेट testvar%} 'और' {{testvar}} 'को लपेटें। – Florian

उत्तर

6

दिलचस्प सवाल है और मुझे कोई जवाब नहीं पता लेकिन ब्लॉक और सामान के साथ बेवकूफ़ बनाने की कोई राशि काम नहीं करेगी। मैंने उत्पन्न PHP कैश टेम्पलेट फ़ाइलों में देखा।

// {{ testvar }} 
echo twig_escape_filter($this->env, $this->getContext($context, "testvar"), "html", null, true); 

तो मूल रूप से यह पहली बार अपने स्थानीय संदर्भ में testvar के लिए लग रहा है: जब आप एक चर गूंज यह तरह दिखता है। यदि नहीं मिला तो यह वैश्विक संदर्भ में दिखता है।

आप परीक्षण वर का मान सेट जब आप मिल:

// {% set testvar = 'level one' }} 
$context["testvar"] = "level one"; 

तो केवल स्थानीय संदर्भ अद्यतन हो जाता है। जब शामिल टेम्पलेट लौटाता है तो परिवर्तित मूल्य दूर हो जाता है।

तो डिफ़ॉल्ट रूप से कम से कम ऐसा लगता है कि वैश्विक चर केवल वास्तव में पढ़े जाते हैं।

एक्सटेंशन के माध्यम से ऐसा करना संभव हो सकता है। मैं आंतरिक के बारे में पर्याप्त नहीं जानता।

1

क्या आपने ट्विग के माध्यम से वैश्विक चर को परिभाषित करने का प्रयास किया है? इस प्रकार आप अपने config.yml फाइल में यह कर सकते हैं:

twig: 
    globals: 
     my_global_var : myvalue 

तो अपने खाके में {{my_global_var}}myvalue

प्रिंट होगा अधिक जानकारी के लिए official docs पढ़ें।

+0

मुझे उन 2 लाइनों को कैसे रखना है: "$ twig = new Twig_Environment ($ loader); $ twig-> addGlobal ('text', नया टेक्स्ट());" मेरे symfony2.1 परियोजना में? – linuxatico

+0

ठीक है, मैं अभी तक सिम्फनी 2.1 का उपयोग नहीं कर रहा हूं, क्योंकि यह बीटा रिलीज है। हालांकि, मैं कह सकता हूं कि Symfony2.016 के साथ आप अपनी config.yml फ़ाइल में एक वैश्विक चर परिभाषित कर सकते हैं [यहां] (http://symfony.com/doc/current/cookbook/templating/global_variables.html)। – JeanValjean

+1

तथ्य यह है कि इस तरह चर वैचारिक रूप से है, मेरा मतलब है, एक टेम्पलेट में आप अपना मान बदल सकते हैं, लेकिन जब आप इसे किसी अन्य टेम्पलेट से एक्सेस करते हैं, तो आप पाएंगे कि इसका मान अब कॉन्फ़िगर में डिफ़ॉल्ट सेट है ।yml – linuxatico

8

एक कंटेनर अवगत वस्तु से:

$this->get('twig')->addGlobal('ThomasDecauxIsAwsome', 4); 
0

यह सेवाएं के माध्यम से एक टहनी एक्सटेंशन को परिभाषित करते हुए संभव है, जाँच here