2012-10-31 15 views
11

मुझे बंडल की अर्थपूर्ण कॉन्फ़िगरेशन में दिए गए डिफ़ॉल्ट मान के साथ एक सरणी नोड को परिभाषित करने की आवश्यकता है। यह वर्तमान में लगता है कि:सिम्फनी 2.1 में मूलभूत मान के साथ सरणी (डिफ़ॉल्ट मान के साथ) या शून्य, अर्थात् कॉन्फ़िगरेशन

my_bundle: 
    foo: ~ 

मैं खाली सरणियों ([] या array()) के बजाय null कि दिए गए का उपयोग नहीं कर सकते हैं:

$node->arrayNode('foo') 
     ->prototype('scalar')->end() 
     ->defaultValue(array('1', '2', '3')) 
    ->end(); 

मैं उपयोगकर्ता null तरह के साथ इस सरणी ओवरराइड करने के लिए विकल्प देना चाहते [] में null से विभिन्न अर्थशास्त्र होना चाहिए।

क्या यह संभव है या कोई गैर-बदसूरत कामकाज है? वर्तमान में मुझे बस एक अपवाद मिलता है:

अमान्य टाइप अपवाद: पथ "my_bundle.foo" के लिए अमान्य प्रकार। उम्मीद की सरणी, लेकिन शून्य

+0

आपने इसे 'स्केलर' के रूप में परिभाषित किया है लेकिन डिफ़ॉल्ट मान 'सरणी' है, क्या यह सरणी प्रकार होना चाहिए? स्केलर पूर्णांक, बूलियन, स्ट्रिंग – olegkhuss

+1

प्रोटोटाइप सरणी के तत्वों को संदर्भित करता है। –

उत्तर

15

आप की तरह कुछ की कोशिश कर सकते है:

$node->arrayNode('foo') 
    ->beforeNormalization() 
     ->ifTrue(function($v) { return $v === null; }) 
     ->then(function($v) { return array(); }) 
    ->end() 
    ->prototype('scalar')->end() 
    ->defaultValue(array('1', '2', '3')) 
->end(); 

या हो सकता है यहां तक ​​कि सरल:

$node->arrayNode('foo') 
    ->treatNullLike(array()) 
    ->prototype('scalar')->end() 
    ->defaultValue(array('1', '2', '3')) 
->end(); 

नहीं तो आप variableNode बल्कि arrayNode से उपयोग कर सकते हैं; यह आपको अधिक स्वतंत्रता देगा लेकिन बॉक्स के बाहर कम सत्यापन/विलय तर्क देगा।

+0

धन्यवाद, लेकिन ऐसा लगता है कि मुझे 'शून्य' के बजाय 'शून्य' के लिए 'सरणी() 'मिलेगा। मुझे लगभग संदेह है कि हालांकि कोई अन्य विकल्प नहीं है। एक्सएमएल में भी "शून्य के साथ ओवरराइड" बनाम खाली सरणी को अभिव्यक्त करना मुश्किल होगा (यमल के लिए भी इतना नहीं)। –

+1

हां, यही होने वाला है, लेकिन मुझे लगता है कि इससे कोई आसान बच नहीं है: यदि आप किसी सरणी को परिभाषित करते हैं तो कॉन्फ़िगरेशन को विलय और सामान्यीकृत करने के बाद आपको अंततः एक सरणी मिल जाएगी। आप फू नोड को एक वैरिएबल नोड के रूप में रखने पर विचार कर सकते हैं अन्यथा, जो आपको अधिक स्वतंत्रता देगा लेकिन बॉक्स के बाहर कम सत्यापन/विलय तर्क देगा। –

+0

यदि आपने वेरिएबल नोड भाग को उत्तर में जोड़ा है, तो मैं इसे स्वीकार कर सकता हूं, क्योंकि मैंने स्पष्ट रूप से ऐसे तरीके से पूछा है जो [] को शून्य से अलग करने की अनुमति देता है। arrayNode ऐसा विकल्प प्रतीत नहीं होता है जो मैं चाहता हूं कि पूरी तरह से करता है। –

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