2013-05-06 8 views
11

जब आप नाम में डैश करते हैं तो आप सरणी कुंजी के मान का मान कैसे प्रस्तुत करते हैं?ट्विग इसमें एक डैश के साथ सरणी कुंजी प्रस्तुत करें

$snippet = " 
    {{ one }} 
    {{ four['five-six'] }} 
    {{ ['two-three'] }} 
"; 

$data = [ 
    'one' => 1, 
    'two-three' => '2-3', 
    'four' => [ 
     'five-six' => '5-6', 
    ], 
]; 

$twig = new \Twig_Environment(new \Twig_Loader_String()); 
echo $twig->render($snippet, $data); 

उत्पादन

1 
5-6 
Notice: Array to string conversion in path/twig/twig/lib/Twig/Environment.php(320) : eval()'d code on line 34 

है और यह four['five-six'] ठीक renders:

मैं इस टुकड़ा है। लेकिन ['two-three'] पर एक त्रुटि फेंकता है।

+0

Thats क्योंकि 'दो three' एक स्थानीय प्रतीक के रूप में इस्तेमाल किया जा रहा है .. इसमें' $ दो three' उपयोग करने की कोशिश की तरह हो कच्चा PHP यदि आप अपने उदाहरण में टवीग का उपयोग कर रहे हैं तो आपको सरणी नाम के साथ सरणी को '$ data = array (' values ​​'=> $ theOtherArray) जैसी कुंजी के रूप में पास करना चाहिए; ' – prodigitalson

उत्तर

18

यह काम नहीं कर सकता है, क्योंकि आपको परिवर्तनीय नामों में मूल ऑपरेटरों का उपयोग नहीं करना चाहिए - Twig आंतरिक रूप से PHP में संकलित करता है, इसलिए यह इसे संभाल नहीं सकता है।

विशेषताएं (तरीकों या एक PHP ऑब्जेक्ट के गुणों को, या एक PHP सरणी के आइटम) वहाँ एक समाधान नहीं है के लिए, from the documentation:

विशेषता विशेष वर्ण (जैसे होता है जब - कि रूप में दर्शाया जाएगा माइनस ऑपरेटर), विशेषता समारोह के बजाय चर विशेषता का उपयोग करने की का उपयोग करें:

{# equivalent to the non-working foo.data-foo #} 
{{ attribute(foo, 'data-foo') }} 
+0

मुझे लगता है कि आप non-multidimentional array @ twig 2.x के लिए '{{विशेषता (_context, 'data-foo')}}' का उपयोग कर सकते हैं। – norixxx

5

वास्तव में इस काम कर सकते हैं, और यह काम करता है:

 $data = [ 
      "list" => [ 
       "one" => [ 
        "title" => "Hello world" 
       ], 
       "one-two" => [ 
        "title" => "Hello world 2" 
       ], 
       "one-three" => [ 
        "title" => "Hello world 3" 
       ] 
      ] 
     ]; 
     $theme = new Twig_Loader_Filesystem("path_to_your_theme_directory"); 
     $twig = new Twig_Environment($theme, array("debug" => true)); 
     $index = "index.tmpl"; // your index template file 
     echo $this->twig->render($index, $data); 

और के टुकड़े टेम्पलेट फ़ाइल के अंदर उपयोग करने के लिए:

{{ list["one-two"]}} - Returns: Array 
{{ list["one-two"].title }} - Returns: "Hello world 2" 
+0

यह एक अलग मामला है, किसी ऑब्जेक्ट में घोंसला है। यह मूल प्रश्न का उत्तर नहीं देता है जिसे अभी भी कामकाज की आवश्यकता है। –

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