2012-12-14 8 views
7

सिम्फनी 2 ट्रीबिल्डर के साथ, प्रत्येक नोड के लिए एक सरणी नोड के अंदर प्रोटोटाइप कॉन्फ़िगर करना संभव है, उदा। जैसेसिम्फनी 2 कॉन्फ़िगरेशन में नेस्टेड प्रोटोटाइप

foo: 
    xxx: { foo: bar} 
    yyy: { foo: bar} 

कहाँ xxx, yyy के किसी भी संख्या और इतने पर (सब पर किसी भी मूल्य) देखते हैं एक विन्यास का समर्थन करने के तरह

$rootNode 
    ->arrayNode('foo') 
    ->prototype('array') 
     ->children() 
      ->scalarNode('foo') 

एक संरचना का उपयोग नोड मैं का एक और स्तर बनाना चाहेंगे बीच में एक और नामित नोड पेश किए बिना वही बात, उदाहरण के लिए जहां xxx, yyy का और इतने नोड्स पर किसी भी संख्या, जिनमें से प्रत्येक, bbb आदि अन्य aaa के किसी भी संख्या नोड्स शामिल कर सकते हैं हो सकता है की तरह

foo: 
    xxx: 
     aaa: { foo: bar} 
     bbb: { foo: bar} 
    yyy: 
     ccc: { foo: bar} 
     ddd: { foo: bar} 

एक विन्यास का समर्थन करने के।

क्या यह हासिल करने का कोई तरीका है? किसी अन्य प्रोटोटाइप कॉल के ->children() के तहत सीधे ->prototype() पर कॉल करना काम नहीं करता है, क्योंकि प्रोटोटाइप नेस्टेड प्रोटोटाइप का समर्थन नहीं करते हैं। नतीजतन मुझे xxx और yyy के लिए हार्ड कोड विशिष्ट मान हैं, जो मैं लिख रहा हूं बंडल की लचीलापन सीमित कर रहा हूं।

उत्तर

11

सिम्फनी 2.2 में जांच की गई, घोंसले के काम।

नेस्ट ->prototype() के बीच ->children() उपयोग न करें:

$rootNode->children() 
    ->arrayNode('foo') 
     ->prototype('array') 
     ->prototype('array') 
      ->children() 
       ->scalarNode('foo'); 
+0

आपको पता है क्यों यह अनिवार्य कर दिया है कि इस मामले में बच्चों का उपयोग नहीं करने के लिए? इस मुद्दे पर बस ठोकर खाई, और इस मामले में बच्चों का उपयोग करना लगातार लग रहा था। – k0pernikus

+0

@ k0pernikus मुझे लगता है क्योंकि प्रोटोटाइप का मतलब तत्वों की कोई गिनती है। –